/*
 * R6HispanoGMC.java
 *
 * Created on 25 de abril de 2007, 19:19
 *
 */

package futbol.tacticas.concursantes2007.R6HispanoGMC;

import futbol.General;
import futbol.tacticas.*;
import futbol.tacticas.concursantes.Tactica;

import java.awt.Color;
import java.awt.Point;
import java.awt.Polygon;
import java.awt.geom.Line2D;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.util.Arrays;
import java.util.Random;
import java.util.Vector;

/**
 *
 * @author R7
 */
public class R6HispanoGMC implements Tactica
{
    
    private int nValores[][]=
    {
        {-150,0,7},//0
        {-90,-75,4},//1
        {-90,0,4},//2
        {-90,75,4},//3
        {-10,-75,4},//4
        {-10,0,4},//5
        {-10,75,4},//6
        {30,0,4},//7
        {100,-45,7},//8
        {90,0,7},//9
        {100,45,7}//10
    };
    
    private Vector<Comando> comandos;
    private Point [] mj;
    private Point [] contrarios;
    private SituacionJugadores sj;
    private Point bola;
    private Random r = new Random();
    private int nJug2;
    private int [] vistaMiPorteria;
    private int [] vistaSuPorteria;
    private int [] piernaArmada;
    private double [] dPorteria = new double [11];
    private double [] dBola = new double [11];
    private double [] []dJugadores = new double [11] [11];//filas->mos; columnas->contrarios
    private double [] []dJugadoresMasPorteria = new double [11] [11];//filas->mos; columnas->contrarios
    private double [] dViaLibre;
    private boolean [] cubierto;
    private boolean [] cubre;
    private int [] marcar = new int [11];
    private boolean [] estamosTramandoAlgo;
    private Comando [] loQueTramamos;
    private Point [] escenarioDeLaTrama;
    private int [] recuperarAliento;
    private boolean [] ojoAlBalon;
    private int [] moscardon;
    private int [] moscardonViaLibre;
    private int vigilarLlamadasRecursivas;
    private double [] acariciarElBalon;
    private final byte RAFA_BENITEZ = 10;
    private final byte FRANK_RAIKJARD = 20;
    private final byte VICENTE_DEL_BOSQUE = 30;
    private final byte FABIO_CAPELLO = 40;
    private final byte MICHEL = 50;
    private byte entrenador;
    private long fechaDelEncuentro;
    private int teLaMeto = 0;
    private int noMeLaMetasMas = 0;
    private int teLaMetoActual = 0;
    private int noMeLaMetasMasActual = 0;
    private long temporadaActual;
    private int credibilidad = 0;
    private boolean vieneElCoco;
    private double [] tierraALaVista;
    private boolean pasadaDeFrenada;
    private int efectosColaterales;
    private int efectosColateralesMasLaterales;
//    private SituacionJugadores elCaldoDeLaAbuela;
    private Point [] contCaldoAbuela;
    private Point [] regresoAlFuturo3;
    private Point bolaDeDan;
    private double elsaPataki, devon;
//    private Line2D angelinaJolie;
    private double [] meEstanEstresando;
    private boolean fuegoADiscrecion;
    private int [] ubicacionEstrategica;
    private boolean dosOrejasYElRabo;
    private boolean robarLaCartera;
    private int abanderado;
    private boolean espaniaVaBien;
    private boolean cerrarLineas;
    private boolean huirConElBotin;
    private int velocidadDelTocinoX;
    private int velocidadDelTocinoY;
    private boolean intervencionDivina;
//    private boolean moverAbajo;
    
    public R6HispanoGMC ()
    {
        estamosTramandoAlgo = new boolean [11];
//        for(int i = 0; i < 11; i++)
//            estamosTramandoAlgo[i] = false;
        
        loQueTramamos = new Comando [11];
        escenarioDeLaTrama = new Point [11];
        recuperarAliento = new int [11];
        ojoAlBalon = new boolean [11];
        moscardon = new int[11];
        acariciarElBalon = new double [11];
        entrenador = VICENTE_DEL_BOSQUE;
        fechaDelEncuentro = System.currentTimeMillis();
        temporadaActual = 45000;
        tierraALaVista = new double [11];
        regresoAlFuturo3 = new Point [11];
        moscardonViaLibre = new int [11];
        dViaLibre = new double [11];
//        angelinaJolie = new Line2D.Double(0.0, 0.0, 0.0, 0.0);
        bola = new Point(0, 0);
        meEstanEstresando = new double [11];
        ubicacionEstrategica = new int [7];
        inicializarCubrir();
    }

    public String getNombre()
    {
        return "R6 Hispano GMC";
    }
    
    public Color getColor1()
    {
        return Color.BLUE;
    }
    
    public Color getColor2()
    {
        return Color.BLACK;
    }
    
    public Color getColorNumero()
    {
        return Color.RED;
    }
    
    public int getFuerza(int n)
    {
        return nValores[n][2];
    }
    public int getXInicial(int n)
    {
        return nValores[n][0];
    }
    
    public int getYInicial(int n)
    {
        return nValores[n][1];
    }
    
    public Vector<Comando> getComandos(SituacionJugadores sj)
    {
        if(System.currentTimeMillis() - fechaDelEncuentro > temporadaActual)
        {
            reunionDeLaJuntaDirectiva();
            temporadaActual += 30000;
        }
        comandos=new Vector();
//        elCaldoDeLaAbuela = this.sj;
        this.sj=sj;
        int nJug = sj.getMasCercanoDeBola();
        bolaDeDan = bola;
        bola=sj.getBola();
        
        try
        {
            velocidadDelTocinoX = mj[5].x;
            velocidadDelTocinoY = mj[5].y;
        }
        catch (NullPointerException e)
        {
            velocidadDelTocinoX = nValores[5][0];
            velocidadDelTocinoY = nValores[5][1];
        }
        
        mj = sj.getMisJugadores();
        
        velocidadDelTocinoX -= mj[5].x;
        velocidadDelTocinoY -= mj[5].y;
        
        contCaldoAbuela = contrarios;
        contrarios = sj.getContrario();
        vistaMiPorteria = getListaCercanos(contrarios, new Point(-160, 0));
        vistaSuPorteria = getListaCercanos(contrarios, new Point(160, 0));
        piernaArmada = getListaCercanos(mj, new Point(160, 0));
        nJug2 = sj.getInfoMasCercano(mj, bola, null, false)[1];
        vieneElCoco = mj[sj.getMasCercanoDeBola()].distance(bola) >
                contrarios[sj.getContrarioMasCerca(bola.getX(),
                bola.getY())].distance(bola);
        
        cauterizar();
        
        
//        regresoAlFuturo3 = contrarios.clone();
//        System.arraycopy(contrarios, 0, regresoAlFuturo3, 0, regresoAlFuturo3.length);
        /*Las dos lneas anteriores han resultado ser una falacia. Crearemos los
          nuevos puntos dentro del lazo.*/
        
        if(contCaldoAbuela != null)//La primera es en la frente nula
            for(int i = 0; i < regresoAlFuturo3.length; i++)
//            {
//                regresoAlFuturo3[i].translate
//                        (contrarios[i].x - contCaldoAbuela[i].x,
//                         contrarios[i].y - contCaldoAbuela[i].y);
                regresoAlFuturo3[i] = new Point
                     (contrarios[i].x+(contrarios[i].x - contCaldoAbuela[i].x),
                      contrarios[i].y+(contrarios[i].y - contCaldoAbuela[i].y));
//            regresoAlFuturo3[i].x += (contrarios[i].x - contCaldoAbuela[i].x);
//            regresoAlFuturo3[i].y += (contrarios[i].y - contCaldoAbuela[i].y);
//             regresoAlFuturo3[i].x += 6;
//            regresoAlFuturo3[i].y += 6;
//           }
        
        
        if(esGol())
            inicializarCubrir();
        
        Point cache = new Point(-160, 0);
        for(int i = 0; i < contrarios.length; i++)
        {
            dPorteria[i] = cache.distance(contrarios[i]);
            
            //Esto lo ponemos aqu mismo por ahorrarnos un bucle, aunque 
            //conceptualmente no tenga mucho que ver que digamos.
            meEstanEstresando[i] = dJugadores[i][moscardon[i]];
        }
        
        for(int i = 0; i < 11; i++)
        {
            double seBuscaMoscardon = 800.0;//2 * diagonal campo
            dViaLibre[i] = 800.0;//2 * diagonal campo
            dBola[i] = bola.distance(contrarios[i]);
            for(int j = 0; j < 11; j++)
            {
                dJugadoresMasPorteria[i][j] = dJugadores[i][j] =
                        mj[i].distance(contrarios[j]);
                dJugadoresMasPorteria[i][j] += dPorteria[j];
                if(dJugadores[i][j] < seBuscaMoscardon)
                {
                    seBuscaMoscardon = dJugadores[i][j];
                    moscardon[i] = j;
                }
                
                if(contrarios[j].x > (mj[i].x-13) &&
                   dJugadores[i][j] < dViaLibre[i])
                {
                    moscardonViaLibre[i] = j;
                    dViaLibre[i] = dJugadores[i][j];
                }
            }
        }
        
        for (int n = 1; n < 11; n++)
        {
            if(n != nJug && n != nJug2)
                comandos.add(new ComandoIrA(n, nValores[n][0], nValores[n][1]));
        }
        
//        comandos.add(new ComandoIrA(nJug, bola.getX(), bola.getY()));
        
        //Estilo C
        boolean [] movimientoDeMaletines = new boolean [7];
        int lasPrimasAVecesSonBuenasParaLaSalud;
        int yoTambienQuieroMiJugosssaPrima;
        bucleDeLosJuegosMalabares:
        for(int i = 0; i < ubicacionEstrategica.length; i++)
        {
            lasPrimasAVecesSonBuenasParaLaSalud =
                    800;//Tolerancia 0 con los recogepelotas
            yoTambienQuieroMiJugosssaPrima = -1;
            for(int j = 1; j < 8; j++)
            {
                if(!movimientoDeMaletines[j-1] &&
                        mj[j].y < lasPrimasAVecesSonBuenasParaLaSalud)
                {
                    lasPrimasAVecesSonBuenasParaLaSalud = mj[j].y;
                    ubicacionEstrategica[i] = j;
                    movimientoDeMaletines[j-1] = true;
                    if(yoTambienQuieroMiJugosssaPrima != -1)
                        movimientoDeMaletines[yoTambienQuieroMiJugosssaPrima]
                                = false;
                    yoTambienQuieroMiJugosssaPrima = j-1;
                }
            }
        }
        
        for(int i = 1; i < 8; i++)
            if(dJugadores[i][moscardon[i]] >
               dJugadores[abanderado][moscardon[abanderado]] + 30.0)
                abanderado = i;
        
        if(fuegoADiscrecion &&
//                !puedeTirarseUnFarol(ubicacionEstrategica[3]))
                !puedeTirarseUnFarol(abanderado))
            robarLaCartera = true;
        
        comprobarComoVaEspania();
        
//        for(int n= 0; n<9; n++)
//            comandos.add(new ComandoPase(n,
//        sj.getMiJugadorMasCerca(mj[n].getX(), mj[n].getY())));
//        comandos.add(new ComandoPase(0,1));
//        comandos.add(new ComandoPase(1,7));
//        comandos.add(new ComandoPase(2,8));
//        comandos.add(new ComandoPase(3,9));
//        comandos.add(new ComandoPase(4,9));
//        comandos.add(new ComandoPase(5,10));
//        comandos.add(new ComandoPase(6,10));
//        comandos.add(new ComandoPase(7,9));
//        comandos.add(new ComandoPase(8,10));
        
//        for (int n=9;n<11;n++)
//            comandos.add(new ComandoTiroAPuerta(n,0));
        
        switch (entrenador)
        {
            case RAFA_BENITEZ:
            {
                casillasM();cannavaroM();fernandoHierroM();
                mj3M();mj4M();mj5M();
                mj6M();mj7M();mj8M();
                leoMessiM();ronaldoM();
                break;
            }
            
            case FRANK_RAIKJARD:
            {
                /*casillas_2();cannavaro_2();fernandoHierro_2();
                mj3_2();mj4_2();mj5_2();
                mj6_2();mj7_2();mj8_2();
                leoMessi_2();ronaldo_2();*/
                casillas_3();cannavaro_3();fernandoHierro_3();
                mj3_3();mj4_3();mj5_3();
                mj6_3();mj7_3();mj8_3();
                leoMessi_3();ronaldo_3();
                break;
            }
            
            case VICENTE_DEL_BOSQUE:
            {
                /*casillasFC();cannavaroFC();fernandoHierroFC();
                mj3FC();mj4FC();mj5FC();
                mj6FC();mj7FC();mj8FC();
                leoMessiFC();ronaldoFC();*/
                casillasV();cannavaroV();fernandoHierroV();
                mj3V();mj4V();mj5V();
                mj6V();mj7V();mj8V();
                leoMessiV();ronaldoV();
                break;
            }
            
            case FABIO_CAPELLO:
            {
                casillasJC();cannavaroJC();fernandoHierroJC();
                mj3JC();mj4JC();mj5JC();
                mj6JC();mj7JC();mj8JC();
                leoMessiJC();ronaldoJC();
                break;
            }
            
            case MICHEL:
            {
                casillas();cannavaro();fernandoHierro();
                mj3();mj4();mj5();
                mj6();mj7();mj8();
                leoMessi();ronaldo();
                break;
            }
            
            default:
            {
                casillas();cannavaro();fernandoHierro();
                mj3();mj4();mj5();
                mj6();mj7();mj8();
                leoMessi();ronaldo();
            }
        }
        
        for(int i = 0; i < 11; i++)
        {
            //Perpetracin
            if(estamosTramandoAlgo[i])
            {
                if(ojoAlBalon [i])
                    comandos.add(new ComandoIrA(i, bola.getX(), bola.getY()));
                else
                    comandos.add(loQueTramamos[i]);
                
                recuperarAliento[i]++;
                
                //Consumacin
                if(puedeTirarseUnFarol(i) ||
                        mj[i].distance(escenarioDeLaTrama[i]) < 5.0 ||
                        recuperarAliento [i] > 10 ||
                        !(bola.x > mj[i].x ||
                            mj[i].distance(bola) <= acariciarElBalon[i]))
                    //No la bola est por delante o nos estamos acercando a ella
                {
                    estamosTramandoAlgo[i] = false;
                    recuperarAliento[i] = 0;
                    ojoAlBalon[i] = false;
                }
                else
                    acariciarElBalon[i] = mj[i].distance(bola);
            }
        }
        
        if(dosOrejasYElRabo)
            for(int sebastianPalomoLinares = 1; sebastianPalomoLinares < 8;
                    sebastianPalomoLinares++)
                comandos.add(new ComandoIrA(sebastianPalomoLinares,
                        bola.getX() + 20.0, mj[sebastianPalomoLinares].getY()));
        
        dosOrejasYElRabo = robarLaCartera = false;
        
        for(int i = 0; i < 11; i++)
            tierraALaVista[i] = mj[i].distance(bola);
        
        return comandos;
    }
    
    private void casillas()
    {
        double x = bola.getX(), y2 = bola.getY();
        
        //Movimiento portero
        int y = (int)(y2 / 1.5);
        if (y < -30) y = -30;
        if (y > 30) y = 30;
        comandos.add(new ComandoIrA(0,nValores[0][0], y));
        
        double /*casillasX = mj[0].getX(),*/ casillasY = mj[0].getY();
        
        if((casillasY > 65 || casillasY < -65) &&
                mj[0].distance(bola) > contrarios[getListaCercanos
                 (contrarios, bola)[0]].distance(bola))
        {
            estamosTramandoAlgo[0] = true;
            comandos.add(loQueTramamos[0] =
                    new ComandoIrA(0, nValores[0][0], nValores[0][1]));
            escenarioDeLaTrama[0] = new Point(nValores[0][0], nValores[0][1]);
        }
        else if(sj.getMasCercanoDeBola() == 0)
            comandos.add(new ComandoIrA(0, x, y2));
        
        /*---------------------*///Mantener zona
//        if(y2 < 0)
//            y2 = 0;
//        if(x > 150)
//            x = 150;
//        else if(x < -30)
//            x = -30;
        /*---------------------*/
        
        if(nJug2 == 0)
            comandos.add(new ComandoIrA(nJug2, x, y2));
        
//        comandos.add(new ComandoPase(0,3));
//        if(casillasY < -60)
//            paseFatidico(0, 7);
//        else if(casillasY > 60)
//            paseFatidico(0,8);
//        else if(r.nextBoolean())
//            paseFatidico(0,4);
//        else
//            paseFatidico(0,5);
        saqueDePuertaPower();
    }
    
    private void cannavaro()
    {
        double x = bola.getX(), y2 = bola.getY();
        
        int y = (int)(y2 / 1.5);
//        if (y < -100) y = -100;
//        if (y > -10) y = -10;
        comandos.add(new ComandoIrA(1,nValores[1][0], y));
        
        /*---------------------*///Mantener zona
//        if(y2 > 0)
//            y = 0;
//        if(x > 0)
//            x = 0;
        /*---------------------*/
        
        if(nJug2 == 1)
            comandos.add(new ComandoIrA(nJug2, x, y2));
        
        /*----------1----------*///Marcar
//        int marcar = sj.getContrarioMasCerca(mj[1].getX(), mj[1].getY());
//        int marcar = vistaMiPorteria[0];
        if(!cubre[1])
        {
            marcar[1] = 0;
            double d = dJugadoresMasPorteria[1][0];
            for(int i = 1; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[1][i] < d)
                {
                    d = dJugadoresMasPorteria[1][i];
                    marcar[1] = i;
                }
            cubierto[marcar[1]] = true;
            cubre [1] = true;
        }
            
//        if(mj[1].distance(contrarios[marcar]) < 30.0 &&
//                contrarios[marcar].getX() < -35.0 &&
//                contrarios[marcar].getY() < 0)

        double deltaX = Math.abs(mj[1].getX() - x)/4;
        if(mj[1].getX() > x)
            deltaX = -deltaX;
        double deltaY = Math.abs(mj[1].getY() - y2)/4;
        if(mj[1].getY() > y2)
            deltaY = -deltaY;
        
        comandos.add(new ComandoIrA(1,
                contrarios[marcar[1]].getX()+deltaX,
                contrarios[marcar[1]].getY()+deltaY));
        /*----------1----------*/
        
        if(sj.getMasCercanoDeBola() == 1)
            comandos.add(new ComandoIrA(1, x, y2));
        
        paseFatidico(1,7);
    }
    
    private void fernandoHierro()
    {
        double x = bola.getX(), y2 = bola.getY();
        
        int y = (int)(y2 / 1.5);
//        if (y > 100) y = 100;
//        if (y < 10) y = 10;
        comandos.add(new ComandoIrA(2,nValores[2][0], y));
        
        /*---------------------*///Mantener zona
//        if(y2 < 0)
//            y2 = 0;
//        if(x > 0)
//            x = 0;
        /*---------------------*/
        
        if(nJug2 == 2)
            comandos.add(new ComandoIrA(nJug2, x, y2));
        
        /*----------1----------*///Marcar
//        int marcar = sj.getContrarioMasCerca(mj[2].getX(), mj[2].getY());
//        int marcar = vistaMiPorteria[1];
        if(!cubre[2])
        {
            double d = 800.0;//2 * diagonal campo
            for(int i = 0; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[2][i] < d)
                {
                    d = dJugadoresMasPorteria[2][i];
                    marcar[2] = i;
                }
            cubierto[marcar[2]] = true;
            cubre [2] = true;
        }
            
//        if(mj[1].distance(contrarios[marcar]) < 30.0 &&
//                contrarios[marcar].getX() < -35.0 &&
//                contrarios[marcar].getY() < 0)
        double deltaX = Math.abs(mj[2].getX() - x)/4;
        if(mj[2].getX() > x)
            deltaX = -deltaX;
        double deltaY = Math.abs(mj[2].getY() - y2)/4;
        if(mj[2].getY() > y2)
            deltaY = -deltaY;
        
        comandos.add(new ComandoIrA(2,
                contrarios[marcar[2]].getX()+deltaX,
                contrarios[marcar[2]].getY()+deltaY));
        /*----------1----------*/
        
        if(sj.getMasCercanoDeBola() == 2)
            comandos.add(new ComandoIrA(2, x, y2));
        
        paseFatidico(2,8);
    }
    
    private void mj3()
    {
//        if(mj[3].distance(sj.getBola()) < 15.0)
//            comandos.add(new ComandoIrA(3,160,0));
        
//        comandos.add(new ComandoPase(3,
//        sj.getMiJugadorMasCerca(mj[3].getX(), mj[3].getY())));
        
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
//        if(y < -70)
//            y = 70;
//        else if(y > 70)
//            y = 70;
//        if(x > 30)
//            x = 30;
//        else if(x < -80)
//            x = -80;
        /*---------------------*/
        
        /*----------1----------*///Marcar
        
        if(!cubre[3])
        {
            double d = 800.0;//2 * diagonal campo
            for(int i = 0; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[3][i] < d)
                {
                    d = dJugadoresMasPorteria[3][i];
                    marcar[3] = i;
                }
            cubierto[marcar[3]] = true;
            cubre [3] = true;
        }
            
        double deltaX = Math.abs(mj[3].getX() - x)/4;
        if(mj[3].getX() > x)
            deltaX = -deltaX;
        double deltaY = Math.abs(mj[3].getY() - y)/4;
        if(mj[3].getY() > y)
            deltaY = -deltaY;
        
        comandos.add(new ComandoIrA(3,
                contrarios[marcar[3]].getX()+deltaX,
                contrarios[marcar[3]].getY()+deltaY));
        /*----------1----------*/
        
        if(nJug2 == 3)
            comandos.add(new ComandoIrA(nJug2, x, y));
         
//        if(r.nextBoolean())
        if(siemprePositifvo(3, 9))
            paseDeLaMuerte(3, 9);
//        else
        else if(siemprePositifvo(3, 10))
            paseDeLaMuerte(3, 10);
        else
            triangulaciones(3);
    }
    
    private void mj4()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
//        if(y > 0)
//            y = 0;
//        if(x > 40)
//            x = 40;
//        else if(x < -100)
//            x = -100;
        /*---------------------*/
        
        /*----------1----------*///Marcar
        
        if(!cubre[4])
        {
            double d = 800.0;//2 * diagonal campo
            for(int i = 0; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[4][i] < d)
                {
                    d = dJugadoresMasPorteria[4][i];
                    marcar[4] = i;
                }
            cubierto[marcar[4]] = true;
            cubre [4] = true;
        }
            
        double deltaX = Math.abs(mj[4].getX() - x)/4;
        if(mj[4].getX() > x)
            deltaX = -deltaX;
        double deltaY = Math.abs(mj[4].getY() - y)/4;
        if(mj[4].getY() > y)
            deltaY = -deltaY;
        
        comandos.add(new ComandoIrA(4,
                contrarios[marcar[4]].getX()+deltaX,
                contrarios[marcar[4]].getY()+deltaY));
        /*----------1----------*/
        
        if(nJug2 == 4)
            comandos.add(new ComandoIrA(nJug2, x, y));
        
        if(siemprePositifvo(4, 9))
            paseDeLaMuerte(4, 9);
        else
            triangulaciones(4);
    }
    
    private void mj5()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
//        if(y < 0)
//            y = 0;
//        if(x > 40)
//            x = 40;
//        else if(x < -100)
//            x = -100;
        /*---------------------*/
        
        /*----------1----------*///Marcar
        
        if(!cubre[5])
        {
            double d = 800.0;//2 * diagonal campo
            for(int i = 0; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[5][i] < d)
                {
                    d = dJugadoresMasPorteria[5][i];
                    marcar[5] = i;
                }
            cubierto[marcar[5]] = true;
            cubre [5] = true;
        }
            
        double deltaX = Math.abs(mj[5].getX() - x)/4;
        if(mj[5].getX() > x)
            deltaX = -deltaX;
        double deltaY = Math.abs(mj[5].getY() - y)/4;
        if(mj[5].getY() > y)
            deltaY = -deltaY;
        
        comandos.add(new ComandoIrA(5,
                contrarios[marcar[5]].getX()+deltaX,
                contrarios[marcar[5]].getY()+deltaY));
        /*----------1----------*/
        
        if(nJug2 == 5)
            comandos.add(new ComandoIrA(nJug2, x, y));
        
        if(siemprePositifvo(5, 10))
            paseDeLaMuerte(5, 10);
        else
            triangulaciones(5);
    }
    
    private void mj6()
    {
         double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
         if(y < -70)
             y = 70;
         else if(y > 70)
             y = 70;
         if(x < -30)
             x = -30;
         else if(x > 80)
             x = 80;
         /*---------------------*/
         
         if(nJug2 == 6)
             comandos.add(new ComandoIrA(nJug2, x, y));
         
         if(x > 30.0)
             tiroDeLaAceitunaALaLuna(9);
//         else if(r.nextBoolean())
//             comandos.add(new ComandoPase(6,9));
         else if(siemprePositifvo(6, 9))
             paseDeLaMuerte(6, 9);
//         else
//             comandos.add(new ComandoPase(6,10));
         else if(siemprePositifvo(6, 10))
             paseDeLaMuerte(6, 10);
         else
             triangulaciones(6);
    }
    
    private void mj7()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
        if(y > 0)
            y = 0;
        if(x > 150)
            x = 150;
        else if(x < -30)
            x = -30;
        /*---------------------*/
        
        if(nJug2 == 7)
            comandos.add(new ComandoIrA(nJug2, x, y));
        
        if(mj[7].distance(new Point(160, 0)) < 100)
            tiroDeLaAceitunaALaLuna(7);
        else if(siemprePositifvo(7, 9))
            paseDeLaMuerte(7, 9);
        else 
//            if(!hacerParedes(7, 9))
//                paseFatidico(7,2);
            triangulaciones(7);
    }
    
    private void mj8()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
        if(y < 0)
            y = 0;
        if(x > 150)
            x = 150;
        else if(x < -30)
            x = -30;
        /*---------------------*/
        
        if(nJug2 == 8)
            comandos.add(new ComandoIrA(nJug2, x, y));
        
        if(mj[8].distance(new Point(160, 0)) < 100)
            tiroDeLaAceitunaALaLuna(8);
        else if(siemprePositifvo(8, 10))
            paseDeLaMuerte(8,10);
        else 
//            if(!hacerParedes(8, 10))
//                paseFatidico(8,1);
            triangulaciones(8);
    }
    
    private void leoMessi()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
        if(y > 0)
            y = 0;
        if(x < 0)
            x = 0;
        /*---------------------*/
        
        if(nJug2 == 9)
            comandos.add(new ComandoIrA(nJug2, x, y));
        
        if(puedeTirarseUnFarol(9) && bola.distance(new Point(0, 0)) < 10)
            paseFatidico(9, 1);
        
        else if(mj[9].distance(new Point(160, 0)) < 100.0)
            if(1.5*mj[9].getX()-mj[9].getY() > 270.0 ||
                1.5*mj[9].getX()+mj[9].getY() > 270.0)
                paseDeLaMuerte(9, listoParaRematar());
            else
                tiroDeLaAceitunaALaLuna(9);
        else
//            comandos.add(new ComandoPase(9,10));
//            comandos.add(new ComandoGolpearBola(9, 50.0, -120.0));
            if(mj[9].x < 100)
                paseFatidico(9, masSoloQueLaUna());
            else
                paseFatidico(9, listoParaRematar());
    }
    
    private void ronaldo()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
        if(y < 0)
            y = 0;
        if(x < 0)
            x = 0;
        /*---------------------*/
        
        if(nJug2 == 10)
            comandos.add(new ComandoIrA(nJug2, x, y));
                
        if(puedeTirarseUnFarol(10) && bola.distance(new Point(0, 0)) < 10)
            paseFatidico(10, 2);
        
        else if(mj[10].distance(new Point(160, 0)) < 100.0)
            if(1.5*mj[10].getX()-mj[10].getY() > 270.0 ||
                1.5*mj[10].getX()+mj[10].getY() > 270.0)
                paseDeLaMuerte(10, listoParaRematar());
            else
                tiroDeLaAceitunaALaLuna(10);
        else
//            comandos.add(new ComandoPase(10,9));
//            comandos.add(new ComandoGolpearBola(10, 50.0, 120.0));
            if(mj[10].x < 100)
                paseFatidico(10, masSoloQueLaUna());
            else
                paseFatidico(10, listoParaRematar());
    }
    
    private int[] getListaCercanos(Point[] lista, Point punto)
    {
        double [] distancias = new double [lista.length];
        int [] devolver = new int [lista.length];
        
        for(int i = 0; i < lista.length; i++)
            distancias[i] = lista[i].distance(punto);
        
        double [] d2 = distancias.clone();
        
        Arrays.sort(d2);
        
        for(int i = 0; i < lista.length; i++)
        {
            for(int j = 0; j < lista.length; j++)
                if(d2[i] == distancias[j])//Ojo!!->No trata distancias repetidas
                {
                    devolver[i] = j;
                    break;
                }
        }
        
        return devolver;
    }
    
    private boolean esGol()
    {
        int x = bola.x, y = bola.y;
        
        if (x>=160 && y>-30 && y<30)
        {
            cerrarLineas = huirConElBotin = false;
            
            teLaMeto++;
            teLaMetoActual++;
            temporadaActual+=5000;
            fuegoADiscrecion = false;
            return true;
        }
        if (x<=-160 && y>-30 && y<30)
        {
            cerrarLineas = huirConElBotin = false;
            
            noMeLaMetasMas++;
            noMeLaMetasMasActual++;
            temporadaActual+=5000;
            fuegoADiscrecion = false;
            
            if(teLaMetoActual < noMeLaMetasMasActual-1)
                reunionDeLaJuntaDirectiva();
            
            return true;
        }
        return false;
    }
    
    private void inicializarCubrir()
    {
        cubierto = new boolean [11];
        for(int i = 0; i < 11; i++)
            cubierto[i] = false;
        
        cubre = new boolean [11];
        for(int i = 0; i < 11; i++)
            cubre[i] = false;
    }
    
    private void tirar(int n)
    {
        int desvio ;//25, -25, 0
        double disquisicion = Line2D.ptSegDist(160.0, -30.0, 160.0, 30.0,
                mj[n].getX(), mj[n].getY());//mj[n].distance(new Point(160, 0));
        double cuadrivio = nValores[n][2] == 6? 60.0 : 
            nValores[n][2] == 7? 80.0 : nValores[n][2] == 5? 40.0 : 20.0;
        
        if(mj[n].distance(contrarios[vistaSuPorteria[0]]) > disquisicion ||
                disquisicion < cuadrivio)
            desvio = 0;
        else if(contrarios[vistaSuPorteria[0]].getY() > 0)
            desvio = -20;
        else
            desvio = 20;
        
        comandos.add(new ComandoTiroAPuerta(n,desvio));
    }
    
    private void tiroDePataDeCabraDeOliverYBenji(int n)
    {
        if(!puedeTirarseUnFarol(n))
            return;
        
        Polygon p = new Polygon(new int [] {bola.x, 160, 160},
                new int [] {bola.y, -30, 30}, 3);
        Point oliver_Kahn = contrarios[getListaCercanos
                (contrarios, new Point(160, 0))[0]];
        
        double disquisicion = Line2D.ptSegDist(160.0, -30.0, 160.0, 30.0,
                mj[n].getX(), mj[n].getY());//mj[n].distance(new Point(160, 0));
        double cuadrivio = nValores[n][2] == 6? 40.0 : 
            nValores[n][2] == 7? 60.0 : nValores[n][2] == 5? 30.0 : 20.0;
            
        if(p.contains(oliver_Kahn) &&
           disquisicion > cuadrivio &&
           mj[n].distance(oliver_Kahn) > 15.0)
        {
            double mA = bola.x - oliver_Kahn.x != 0 ?
                (double) (bola.y - oliver_Kahn.y) /
                    (double) (bola.x - oliver_Kahn.x) :
                /*Double.MAX_VALUE*//*Por si las avispas...*/
                100000,
            nA = bola.y - mA * bola.x;
            
            int interseccionA = (int) (160 * mA + nA),
            yB = 0;
            
            if(interseccionA > -30 && interseccionA < 30)
                yB = interseccionA > 0 ? (interseccionA-30)/2 :
                    (interseccionA+30)/2;
            
            mA = bola.x == 160 ? /*Double.MAX_VALUE*//*Por si las avispas...*/
                100000 : (double) (yB - bola.y) / (double) (160 - bola.x);
            nA = bola.y - mA * bola.x;
          
            comandos.add(new ComandoGolpearBola(n, 210.0, 210.0 * mA + nA));
        }        
        else
            comandos.add(new ComandoGolpearBola(n, 210.0, 0.0));
    }

    private void tiroDeLaAceitunaALaLuna(int n)
    {
        if(!puedeTirarseUnFarol(n))
            return;
        
        if(mj[n].y < 30 && mj[n].y > -30)
            tiroDePataDeCabraDeOliverYBenji(n);
        else
        {
            double mA = bola.x == 160 ? 
                /*Double.MAX_VALUE*//*Por si las avispas...*/ 100000 :
                (double) bola.y /
                    (double) (bola.x - 160),
            nA = - mA * 160;
            
            comandos.add(new ComandoGolpearBola(n, 210.0, 210.0 * mA + nA));
        }
    }

    private void paseDeLaMuerte(int yo, int aTi)
    {
        //Mientras el portero no suba a rematar no tontear con l
        if(aTi == 0) return;
        
        int [] loCubren = getListaCercanos(contrarios, mj[aTi]);
        double umbral = 20.0;
        
        if(mj[aTi].distance(contrarios[loCubren[0]]) > umbral)
            paseFatidico(yo, aTi);
        else
        {
            
            if(puedeTirarseUnFarol(yo))
            {
                double //d = contrarios[loCubren[0]].distance(mj[aTi]),
                        deltaX = 0, //contrarios[loCubren[0]].getX(),
                        deltaY = 0;//contrarios[loCubren[0]].getY();
                
                for(int i = 0;
                     i < loCubren.length &&
                        contrarios[loCubren[i]].distance(mj[aTi]) < umbral; i++)
                {
                    deltaX += (mj[aTi].getX() - contrarios[loCubren[i]].getX());
                    deltaY += (mj[aTi].getY() - contrarios[loCubren[i]].getY());
                }
                
//            deltaX = mj[aTi].getX() - contrarios[loCubren[0]].getX();
//            deltaY = mj[aTi].getY() - contrarios[loCubren[0]].getY();
                
                double alfa = 2 * Math.sqrt
                        (umbral*umbral / (deltaX*deltaX + deltaY*deltaY));
                
                deltaX *= alfa;
                deltaY *= alfa;
                
                double puntoFatidicoX = mj[aTi].getX() + deltaX,
                        puntoFatidicoY = mj[aTi].getY() + deltaY;
                
                puntoFatidicoX = puntoFatidicoX > 160.0? 160.0 : puntoFatidicoX;
                puntoFatidicoY = puntoFatidicoY > 120.0? 120.0 :
                    puntoFatidicoY < -120? -120 : puntoFatidicoY;
                
                comandos.add(new ComandoGolpearBola
                        (yo, puntoFatidicoX, puntoFatidicoY));
                
                
                estamosTramandoAlgo[aTi] = true;
                comandos.add( loQueTramamos[aTi] = new ComandoIrA
                        (aTi, puntoFatidicoX, puntoFatidicoY));
                escenarioDeLaTrama[aTi] =
                        new Point((int) puntoFatidicoX, (int) puntoFatidicoY);
                acariciarElBalon[aTi] = mj[aTi].distance(bola);
            }
        }

    }

    private boolean puedeTirarseUnFarol(int yo)
    {
        return mj[yo].distance(bola) < 10;
    }

    private void paseFatidico(int yo, int aTi)
    {
        if(puedeTirarseUnFarol(yo))
        {
            //Mientras el portero no suba a rematar no tontear con l
            //Si est demasiado cerca, proceder con el despiste de Ronaldio
            if(aTi == 0 || mj[yo].distance(mj[aTi]) < 20.0)
            {
                if(vigilarLlamadasRecursivas++ < 11)
                {
                    int samuelEtto = masSoloQueLaUna();
                    paseFatidico(yo, samuelEtto);
                }
                else
                {
                    if(mj[yo].distance(new Point(160, 0)) < 100)
                        tiroDeLaAceitunaALaLuna(yo);
                    else
                        if(yo != piernaArmada[0])
                            comandos.add(new ComandoPase(yo, piernaArmada[0]));
                        else
                            comandos.add(new ComandoPase(yo, piernaArmada[1]));
                    
                    vigilarLlamadasRecursivas = 0;
                }
            }
            else
            {
                comandos.add(new ComandoPase(yo, aTi));
                
                estamosTramandoAlgo[aTi] = true;
                comandos.add(loQueTramamos [aTi] = new ComandoIrA
                        (aTi, bola.getX(), bola.getY()));
                escenarioDeLaTrama[aTi] = bola;
                ojoAlBalon[aTi] = true;
                acariciarElBalon[aTi] = mj[aTi].distance(bola);
                vigilarLlamadasRecursivas = 0;
            }
        }
    }
    
    private void cauterizar()
    {
        elsaPataki = bola.x - bolaDeDan.x != 0 ?
            (double) (bola.y - bolaDeDan.y) / (double) (bola.x - bolaDeDan.x) :
            /*Double.MAX_VALUE*//*Por si las musaraas*/10000;
        devon = bola.y - elsaPataki * bola.x;
    }

    private int masSoloQueLaLuna()
    {
        //Excluimos a Casillas, que ya hace bastante trabajo
        int enElPuntoDeMira = 1;
        double meTieneAgarradoDeLaCamiseta = dJugadores[1][moscardon[1]];
        
        for(int i = 2; i < 11; i++)
            if(dJugadores[i][moscardon[i]] > meTieneAgarradoDeLaCamiseta)
                enElPuntoDeMira = i;
        
        return enElPuntoDeMira;
    }
    
    private int masSoloQueLaUna()
    {
        int [] convocados = new int [11];
        int entranEnLaConvocatoria = 0;
        
        //Excluimos a Casillas, que ya hace bastante trabajo
        for(int i = 1; i < 11; i++)
            if(dJugadores[i][moscardon[i]] > 40)
                convocados[entranEnLaConvocatoria++] = i;
        
        if(entranEnLaConvocatoria == 0)
            return masSoloQueLaLuna();
        else
        {
            int laEstaPidiendo = convocados[0];
            for(int i = 0; i < entranEnLaConvocatoria; i++)
                if(mj[convocados[i]].x > mj[laEstaPidiendo].x)
                    laEstaPidiendo = convocados[i];
            return laEstaPidiendo;
        }
    }
    
    private int listoParaRematar()
    {
        int [] convocados = new int [11];
        int entranEnLaConvocatoria = 0;
        
        //Excluimos a Casillas, que ya hace bastante trabajo
        for(int i = 1; i < 11; i++)
        {
            double x = mj[i].getX(), y = mj[i].getY();
            if(1.5*x-y < 270.0 && 1.5*x+y < 270.0)
                convocados[entranEnLaConvocatoria++] = i;
        }
        
        if(entranEnLaConvocatoria == 0)
            return masSoloQueLaUna();
        else
        {
            int laEstaPidiendo = convocados[0];
            for(int i = 0; i < entranEnLaConvocatoria; i++)
                if(mj[convocados[i]].x > mj[laEstaPidiendo].x)
                    laEstaPidiendo = convocados[i];
            return laEstaPidiendo;
        }
    }

    private void saqueDePuertaPower()
    {
        int [] convocados = new int [11];
        int entranEnLaConvocatoria = 0;
        
        //Excluimos a Casillas, que es quien saca de puerta
        for(int i = 1; i < 11; i++)
        {
            if(mj[i].x > -80 && mj[i].x < 80)
                convocados[entranEnLaConvocatoria++] = i;
        }
        
        if(entranEnLaConvocatoria == 0)
            if(mj[0].y < -60)
                paseFatidico(0, 7);
            else if(mj[0].y > 60)
                paseFatidico(0,8);
            else if(r.nextBoolean())
                paseFatidico(0,4);
            else
                paseFatidico(0,5);
        else
        {
            int canutee = convocados[0];
            for(int i = 0; i < entranEnLaConvocatoria; i++)
                if(dJugadores[convocados[i]][moscardon[convocados[i]]] >
                   dJugadores[canutee][moscardon[canutee]])
                    canutee = convocados[i];
            
            paseFatidico(0, canutee);
        }
    }
    
    private boolean siemprePositifvo(int yo, int tu)
    {
        if(mj[yo].y > mj[tu].y)
            return nuncaNegatifvo(yo, tu);
        
        double m = (mj[tu].getY()-mj[yo].getY()) /
                (mj[tu].getX()-mj[yo].getX());
        double n = mj[yo].getY() - m*mj[yo].getX();
        
        int [] convocados = new int [11];
        int entranEnLaConvocatoria = 0;
        
        for(int i = 0; i < 11; i++)
        {
            if(dJugadores[tu][i] < 30)
                convocados[entranEnLaConvocatoria++] = i;
        }
        
        if(entranEnLaConvocatoria == 0)
            return true;
        else
            for(int i = 0; i < entranEnLaConvocatoria; i++)
                if(contrarios[convocados[i]].getX()*m -
                   contrarios[convocados[i]].getY() + n > 0)
                    return false;
        return true;
    }
    
    private boolean nuncaNegatifvo(int yo, int tu)
    {
        double m = (mj[tu].getY()-mj[yo].getY()) /
                (mj[tu].getX()-mj[yo].getX());
        double n = mj[yo].getY() - m*mj[yo].getX();
        
        int [] convocados = new int [11];
        int entranEnLaConvocatoria = 0;
        
        for(int i = 0; i < 11; i++)
        {
            if(dJugadores[tu][i] < 30)
                convocados[entranEnLaConvocatoria++] = i;
        }
        
        if(entranEnLaConvocatoria == 0)
            return true;
        else
            for(int i = 0; i < entranEnLaConvocatoria; i++)
                if(contrarios[convocados[i]].getX()*m -
                   contrarios[convocados[i]].getY() + n < 0)
                    return false;
        return true;
    }

    private void chupar(int elChupon)
    {
        if(puedeTirarseUnFarol(elChupon))
        {
            int [] sius = getListaCercanos(contrarios, mj[elChupon]);
            double umbral = 40.0;
            
            if(mj[elChupon].distance(contrarios[sius[0]]) > umbral)
            {
                double avances = mj[elChupon].getX() + 30.0;
                avances = avances > 160.0? 160.0 : avances;
                
                comandos.add(new ComandoGolpearBola
                        (elChupon, avances, mj[elChupon].getY()));
            }
            else
            {
                double deltaX = 0, deltaY = 0;
                
                for(int i = 0;
                     i < sius.length &&
                        contrarios[sius[i]].distance(mj[elChupon]) < umbral; i++)
                {
                    deltaX += (mj[elChupon].getX() - contrarios[sius[i]].getX());
                    deltaY += (mj[elChupon].getY() - contrarios[sius[i]].getY());
                }
                
                double alfa = Math.sqrt
                        (900 / (deltaX*deltaX + deltaY*deltaY));
                
                deltaX *= alfa;
                deltaY *= alfa;
                
                double elCaminoDesmarcadoX = mj[elChupon].getX() + deltaX,
                       elCaminoDesmarcadoY = mj[elChupon].getY() + deltaY;
                
                elCaminoDesmarcadoX = elCaminoDesmarcadoX > 160.0? 160.0 :
                    elCaminoDesmarcadoX < -160 ? -160 : elCaminoDesmarcadoX;
                elCaminoDesmarcadoY= elCaminoDesmarcadoY> 120.0? 120.0 :
                    elCaminoDesmarcadoY < -120? -120 : elCaminoDesmarcadoY;
                
                comandos.add(new ComandoGolpearBola
                        (elChupon, elCaminoDesmarcadoX, elCaminoDesmarcadoY));
            }
        }
    }

    private boolean bicicletas(int robinho)
    {
        if(dJugadores[robinho][moscardon[robinho]] < 15.0
                || !puedeTirarseUnFarol(robinho))
            return false;
        
        double deltaX = 0.0, deltaY = 0.0;
        
        for(int i = 0; i < 11; i++)
            if(dJugadores[robinho][i] < 25.0)
            {
                deltaX += (mj[robinho].getX() - contrarios[i].getX());
                deltaY += (mj[robinho].getY() - contrarios[i].getY());
            }
        
        if(deltaX != 0.0 && deltaY != 0.0)
        {
            double alfa = Math.sqrt
                    (1225 / (deltaX*deltaX + deltaY*deltaY));
            
            deltaX *= alfa;
            deltaY *= alfa;
            
            double puntoFatidicoX = mj[robinho].getX() + deltaX,
                    puntoFatidicoY = mj[robinho].getY() + deltaY;
            
            puntoFatidicoX = puntoFatidicoX > 160.0? 160.0 :
                puntoFatidicoX < -160? -160 : puntoFatidicoX;
            puntoFatidicoY = puntoFatidicoY > 120.0? 120.0 :
                puntoFatidicoY < -120? -120 : puntoFatidicoY;
            
            comandos.add(new ComandoGolpearBola
                    (robinho, puntoFatidicoX, puntoFatidicoY));
            
            comandos.add(new ComandoIrA(robinho,
                    puntoFatidicoX, puntoFatidicoY));
        }
        else
        {
            double x = mj[robinho].getX() + 35.0, y = mj[robinho].getY();
            
            comandos.add(new ComandoGolpearBola(robinho, x, y));            
            comandos.add(new ComandoIrA(robinho, x, y));
        }
        
        return true;
    }
    
    private boolean hacerParedes(int yo, int contigo)
    {
        if(puedeTirarseUnFarol(yo))
        {
            double paredY = (mj[yo].getY() + mj[contigo].getY()) / 2;
            
            comandos.add(new ComandoGolpearBola
                    (yo, 300.0, paredY));
            
            
            estamosTramandoAlgo[contigo] = true;
            comandos.add( loQueTramamos[contigo] = new ComandoIrA
                    (contigo, 300.0, paredY));
            escenarioDeLaTrama[contigo] =
                    new Point((int) 300, (int) paredY);
            acariciarElBalon[contigo] = mj[contigo].distance(bola);
            
            return true;
        }
        return false;
    }
    
    private void triangulaciones(int bajoLaBatutaDe)
    {
        if(puedeTirarseUnFarol(bajoLaBatutaDe))
        {
            int [] laEstanPidiendo = new int [11];
            int cuantosLaPiden = 0;
            //Casillas no interviene
            esteEstaCubierto:for(int i = 1; i < 11; i++)
            {
                int [] convocados = new int [11];
                int entranEnLaConvocatoria = 0;
                
                for(int j = 0; j < 11; j++)
                {
                    if(dJugadores[i][j] < 30)
                        convocados[entranEnLaConvocatoria++] = j;
                }
                
                if(entranEnLaConvocatoria == 0)
                    laEstanPidiendo[cuantosLaPiden++] = i;
                else
                {
                    for(int j = 0; j < entranEnLaConvocatoria; j++)
                        if(mj[bajoLaBatutaDe].distance(mj[i]) > 40.0 &&
                            mj[bajoLaBatutaDe].distance(contrarios[convocados[j]])
                             < mj[bajoLaBatutaDe].distance(mj[i])+10.0)
                            continue esteEstaCubierto;
                    laEstanPidiendo[cuantosLaPiden++] = i;
                }
            }
            
            if(cuantosLaPiden == 0)
                //Situacin improbable, pero a lo mejor se puede mejorar
                //esta lnea por si las moscas
                paseDeLaMuerte(bajoLaBatutaDe, 9);
            else
            {
                int seOfreceARecogerla = laEstanPidiendo[0];
                
                for(int i = 0; i < cuantosLaPiden; i++)
                    if(mj[laEstanPidiendo[i]].x > mj[seOfreceARecogerla].x)
                        seOfreceARecogerla = laEstanPidiendo[i];
                
                paseFatidico(bajoLaBatutaDe, seOfreceARecogerla);
            }
        }
    }
    
    private void cesarEntrenador()
    {
        switch(entrenador)
        {
            case RAFA_BENITEZ:
            {
//                entrenador = FRANK_RAIKJARD;
                entrenador = VICENTE_DEL_BOSQUE;
//                nValores = new int [][]
//                {
//                    {-150,0,7},//0
//                    {-100,-40,6},//1
//                    {-100,40,6},//2
//                    {-30,0,6},//3
//                    {-30,-70,6},//4
//                    {-30,70,6},//5
//                    {30,0,6},//6
//                    {30,-70,5},//7
//                    {30,70,6},//8
//                    {80,-30,6},//9
//                    {80,30,6}//10
//                };
//                
//                System.out.println("Ante los psimos resultados cosechados " +
//                        "hasta el momento, Rafa Bentez es destituido. " +
//                        "Toma el relevo Frank Raikjard.");
                break;
            }
            
            case FRANK_RAIKJARD:
            {
//                entrenador = VICENTE_DEL_BOSQUE;
//                nValores = new int[][]
//                {
//                    {-150,0,7},//0
//                    {-90,-40,6},//1
//                    {-90,40,6},//2
//                    {-40,-65,6},//3
//                    {-40,65,6},//4
//                    {0,-0,6},//5
//                    {40,-80,6},//6
//                    {40,80,6},//7
//                    {90,-45,6},//8
//                    {90,45,6},//9
//                    {100,0,6}//10
//                };
//                
//                System.out.println("Ante los psimos resultados obtenidos " +
//                        "hasta el momento, Frank Raikjard es destituido. " +
//                        "Toma el relevo Vicente del Bosque.");
                break;
            }
            
            case VICENTE_DEL_BOSQUE:
            {
//                entrenador = FABIO_CAPELLO;
                entrenador = RAFA_BENITEZ;
//                nValores = new int[][]
//                {
//                    {-150,0,7},//0
//                    {-90,-75,4},//1
//                    {-90,0,4},//2
//                    {-90,75,4},//3
//                    {-10,-75,4},//4
//                    {-10,0,4},//5
//                    {-10,75,4},//6
//                    {30,0,4},//7
//                    {100,-45,6},//8
//                    {90,0,6},//9
//                    {100,45,6}//10
//                };
//                
//                System.out.println("Ante los psimos resultados cosechados " +
//                        "hasta el momento, Vicente del Bosque es destituido. " +
//                        "Toma el relevo Fabio Capello.");
                break;
            }
            
            case FABIO_CAPELLO:
            {
//                entrenador = MICHEL;
//                nValores = new int [][]
//                {
//                    {-150,0,7},//0
//                    {-100,-40,6},//1
//                    {-100,40,6},//2
//                    {-30,0,6},//3
//                    {-30,-70,6},//4
//                    {-30,70,6},//5
//                    {30,0,6},//6
//                    {30,-70,5},//7
//                    {30,70,6},//8
//                    {80,-30,6},//9
//                    {80,30,6}//10
//                };
//                
//                System.out.println("Ante los psimos resultados obtenidos " +
//                        "hasta el momento, Fabio Capello es destituido. " +
//                        "Toma el relevo Michel.");
                break;
            }
            
            case MICHEL:
            {
                entrenador = RAFA_BENITEZ;
                nValores = new int[][]
                {
                    {-150,0,7},//0
                    {-90,-75,4},//1
                    {-90,0,4},//2
                    {-90,75,4},//3
                    {-10,-75,4},//4
                    {-10,0,4},//5
                    {-10,75,4},//6
                    {30,0,4},//7
                    {100,-45,6},//8
                    {90,0,6},//9
                    {100,45,6}//10
                };
                
//                System.out.println("Ante los psimos resultados cosechados " +
  //                      "hasta el momento, Michel es destituido. " +
    //                    "Toma el relevo Rafa Bentez.");
                credibilidad++;
                break;
            }
            
            default:
                nValores = new int[][]
                {
                    {-150,0,7},//0
                    {-90,-75,4},//1
                    {-90,0,4},//2
                    {-90,75,4},//3
                    {-10,-75,4},//4
                    {-10,0,4},//5
                    {-10,75,4},//6
                    {30,0,4},//7
                    {100,-45,6},//8
                    {90,0,6},//9
                    {100,45,6}//10
                };
                entrenador = RAFA_BENITEZ;
        }
    }

    private void reunionDeLaJuntaDirectiva()
    {
        if(teLaMetoActual < noMeLaMetasMasActual-credibilidad)
        {
            cesarEntrenador();
            teLaMetoActual = noMeLaMetasMasActual = 0;
        }
/*        else
        {
            String carneDeCanion;
            
            switch(entrenador)
            {
                case RAFA_BENITEZ:
                {
                    carneDeCanion = "Rafael Bentez";
                    break;
                }
                
                case FRANK_RAIKJARD:
                {
                    carneDeCanion = "Frank Raikjard";
                    break;
                }
                
                case VICENTE_DEL_BOSQUE:
                {
                    carneDeCanion = "Vicente del Bosque";
                    break;
                }
                
                case FABIO_CAPELLO:
                {
                    carneDeCanion = "Fabio Capello";
                    break;
                }
                
                case MICHEL:
                {
                    carneDeCanion = "Michel";
                    break;
                }
                
                default:
                    carneDeCanion = "El entrenador misterioso";
            }
            
            System.out.println(carneDeCanion + " es renovado por una temporada" +
                    " ms.");
        }*/
        
//        System.out.println("Marcador: "+teLaMeto+"-"+noMeLaMetasMas+
//                ". Marcador parcial: "+teLaMetoActual+"-"+noMeLaMetasMasActual);
    }
    
    private void mj3FR()
    {
//        if(mj[3].distance(sj.getBola()) < 15.0)
//            comandos.add(new ComandoIrA(3,160,0));
        
//        comandos.add(new ComandoPase(3,
//        sj.getMiJugadorMasCerca(mj[3].getX(), mj[3].getY())));
        
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
//        if(y < -70)
//            y = 70;
//        else if(y > 70)
//            y = 70;
//        if(x > 30)
//            x = 30;
//        else if(x < -80)
//            x = -80;
        /*---------------------*/
        
        /*----------1----------*///Marcar
        
        if(!cubre[3])
        {
            double d = 800.0;//2 * diagonal campo
            for(int i = 0; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[3][i] < d)
                {
                    d = dJugadoresMasPorteria[3][i];
                    marcar[3] = i;
                }
            cubierto[marcar[3]] = true;
            cubre [3] = true;
        }
            
        double deltaX = Math.abs(mj[3].getX() - x)/4;
        if(mj[3].getX() > x)
            deltaX = -deltaX;
        double deltaY = Math.abs(mj[3].getY() - y)/4;
        if(mj[3].getY() > y)
            deltaY = -deltaY;
        
        comandos.add(new ComandoIrA(3,
                contrarios[marcar[3]].getX()+deltaX,
                contrarios[marcar[3]].getY()+deltaY));
        /*----------1----------*/
        
        if(nJug2 == 3)
            comandos.add(new ComandoIrA(nJug2, x, y));
         
        if(r.nextBoolean())
            paseDeLaMuerte(3,9);
        else
            paseDeLaMuerte(3,10);
    }
    
    private void mj4FR()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
//        if(y > 0)
//            y = 0;
//        if(x > 40)
//            x = 40;
//        else if(x < -100)
//            x = -100;
        /*---------------------*/
        
        /*----------1----------*///Marcar
        
        if(!cubre[4])
        {
            double d = 800.0;//2 * diagonal campo
            for(int i = 0; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[4][i] < d)
                {
                    d = dJugadoresMasPorteria[4][i];
                    marcar[4] = i;
                }
            cubierto[marcar[4]] = true;
            cubre [4] = true;
        }
            
        double deltaX = Math.abs(mj[4].getX() - x)/4;
        if(mj[4].getX() > x)
            deltaX = -deltaX;
        double deltaY = Math.abs(mj[4].getY() - y)/4;
        if(mj[4].getY() > y)
            deltaY = -deltaY;
        
        comandos.add(new ComandoIrA(4,
                contrarios[marcar[4]].getX()+deltaX,
                contrarios[marcar[4]].getY()+deltaY));
        /*----------1----------*/
        
        if(nJug2 == 4)
            comandos.add(new ComandoIrA(nJug2, x, y));
        
        paseDeLaMuerte(4,9);
    }
    
    private void mj5FR()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
//        if(y < 0)
//            y = 0;
//        if(x > 40)
//            x = 40;
//        else if(x < -100)
//            x = -100;
        /*---------------------*/
        
        /*----------1----------*///Marcar
        
        if(!cubre[5])
        {
            double d = 800.0;//2 * diagonal campo
            for(int i = 0; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[5][i] < d)
                {
                    d = dJugadoresMasPorteria[5][i];
                    marcar[5] = i;
                }
            cubierto[marcar[5]] = true;
            cubre [5] = true;
        }
            
        double deltaX = Math.abs(mj[5].getX() - x)/4;
        if(mj[5].getX() > x)
            deltaX = -deltaX;
        double deltaY = Math.abs(mj[5].getY() - y)/4;
        if(mj[5].getY() > y)
            deltaY = -deltaY;
        
        comandos.add(new ComandoIrA(5,
                contrarios[marcar[5]].getX()+deltaX,
                contrarios[marcar[5]].getY()+deltaY));
        /*----------1----------*/
        
        if(nJug2 == 5)
            comandos.add(new ComandoIrA(nJug2, x, y));
        
        paseDeLaMuerte(5,10);
    }
    
    private void mj6FR()
    {
         double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
         if(y < -70)
             y = 70;
         else if(y > 70)
             y = 70;
         if(x < -30)
             x = -30;
         else if(x > 80)
             x = 80;
         /*---------------------*/
         
         if(nJug2 == 6)
             comandos.add(new ComandoIrA(nJug2, x, y));
         
         if(x > 30.0)
             tiroDeLaAceitunaALaLuna(9);
         else if(r.nextBoolean())
//             comandos.add(new ComandoPase(6,9));
             paseDeLaMuerte(6, 9);
         else
//             comandos.add(new ComandoPase(6,10));
             paseDeLaMuerte(6, 10);
    }
    
    private void mj7FR()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
        if(y > 0)
            y = 0;
        if(x > 150)
            x = 150;
        else if(x < -30)
            x = -30;
        /*---------------------*/
        
        if(nJug2 == 7)
            comandos.add(new ComandoIrA(nJug2, x, y));
        
        if(mj[7].distance(new Point(160, 0)) < 100)
            tiroDeLaAceitunaALaLuna(7);
        else
            paseDeLaMuerte(7, 9);
    }
    
    private void mj8FR()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
        if(y < 0)
            y = 0;
        if(x > 150)
            x = 150;
        else if(x < -30)
            x = -30;
        /*---------------------*/
        
        if(nJug2 == 8)
            comandos.add(new ComandoIrA(nJug2, x, y));
        
        if(mj[8].distance(new Point(160, 0)) < 100)
            tiroDeLaAceitunaALaLuna(8);
        else paseDeLaMuerte(8,10);
    }
    
    private void leoMessiFR()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
        if(y > 0)
            y = 0;
        if(x < 0)
            x = 0;
        /*---------------------*/
        
        if(nJug2 == 9)
            comandos.add(new ComandoIrA(nJug2, x, y));
        
        if(puedeTirarseUnFarol(9) && bola.distance(new Point(0, 0)) < 10)
            paseFatidico(9, 1);
        
        else if(mj[9].distance(new Point(160, 0)) < 100.0)
            if(1.5*mj[9].getX()-mj[9].getY() > 270.0 ||
                1.5*mj[9].getX()+mj[9].getY() > 270.0)
                paseDeLaMuerte(9, listoParaRematar());
            else
                tiroDeLaAceitunaALaLuna(9);
        else
//            comandos.add(new ComandoPase(9,10));
//            comandos.add(new ComandoGolpearBola(9, 50.0, -120.0));
            if(mj[9].x < 100)
                paseFatidico(9, masSoloQueLaUna());
            else
                paseFatidico(9, listoParaRematar());
    }
    
    private void ronaldoFR()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
        if(y < 0)
            y = 0;
        if(x < 0)
            x = 0;
        /*---------------------*/
        
        if(nJug2 == 10)
            comandos.add(new ComandoIrA(nJug2, x, y));
                
        if(puedeTirarseUnFarol(10) && bola.distance(new Point(0, 0)) < 10)
            paseFatidico(10, 2);
        
        if(mj[10].distance(new Point(160, 0)) < 100.0)
            if(1.5*mj[10].getX()-mj[10].getY() > 270.0 ||
                1.5*mj[10].getX()+mj[10].getY() > 270.0)
                paseDeLaMuerte(10, listoParaRematar());
            else
                tiroDeLaAceitunaALaLuna(10);
        else
//            comandos.add(new ComandoPase(10,9));
//            comandos.add(new ComandoGolpearBola(10, 50.0, 120.0));
            if(mj[10].x < 100)
                paseFatidico(10, masSoloQueLaUna());
            else
                paseFatidico(10, listoParaRematar());
    }
    
    private void casillasVB()
    {
        double x = bola.getX(), y2 = bola.getY();
        
        //Movimiento portero
        int y = (int)(y2 / 1.5);
        if (y < -30) y = -30;
        if (y > 30) y = 30;
        comandos.add(new ComandoIrA(0,nValores[0][0], y));
        
        double /*casillasX = mj[0].getX(),*/ casillasY = mj[0].getY();
        
        if((casillasY > 65 || casillasY < -65) &&
                mj[0].distance(bola) > contrarios[getListaCercanos
                 (contrarios, bola)[0]].distance(bola))
        {
            estamosTramandoAlgo[0] = true;
            comandos.add(loQueTramamos[0] =
                    new ComandoIrA(0, nValores[0][0], nValores[0][1]));
            escenarioDeLaTrama[0] = new Point(nValores[0][0], nValores[0][1]);
        }
        else if(sj.getMasCercanoDeBola() == 0)
            comandos.add(new ComandoIrA(0, x, y2));
        
        /*---------------------*///Mantener zona
//        if(y2 < 0)
//            y2 = 0;
//        if(x > 150)
//            x = 150;
//        else if(x < -30)
//            x = -30;
        /*---------------------*/
        
        if(nJug2 == 0)
            comandos.add(new ComandoIrA(nJug2, x, y2));
        
//        comandos.add(new ComandoPase(0,3));
//        if(casillasY < -60)
//            paseFatidico(0, 7);
//        else if(casillasY > 60)
//            paseFatidico(0,8);
//        else if(r.nextBoolean())
//            paseFatidico(0,4);
//        else
//            paseFatidico(0,5);
        saqueDePuertaNower();
    }
    
    private void cannavaroVB()
    {
        double x = bola.getX(), y2 = bola.getY();
        
        int y = (int)(y2 / 1.5);
//        if (y < -100) y = -100;
//        if (y > -10) y = -10;
        comandos.add(new ComandoIrA(1,nValores[1][0], y));
        
        /*---------------------*///Mantener zona
//        if(y2 > 0)
//            y = 0;
//        if(x > 0)
//            x = 0;
        /*---------------------*/
        
        if(nJug2 == 1)
            comandos.add(new ComandoIrA(nJug2, x, y2));
        
        /*----------1----------*///Marcar
//        int marcar = sj.getContrarioMasCerca(mj[1].getX(), mj[1].getY());
//        int marcar = vistaMiPorteria[0];
        if(!cubre[1])
        {
            marcar[1] = 0;
            double d = dJugadoresMasPorteria[1][0];
            for(int i = 1; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[1][i] < d)
                {
                    d = dJugadoresMasPorteria[1][i];
                    marcar[1] = i;
                }
            cubierto[marcar[1]] = true;
            cubre [1] = true;
        }
            
//        if(mj[1].distance(contrarios[marcar]) < 30.0 &&
//                contrarios[marcar].getX() < -35.0 &&
//                contrarios[marcar].getY() < 0)
        double deltaX = Math.abs(mj[1].getX() - x)/4;
        if(mj[1].getX() > x)
            deltaX = -deltaX;
        double deltaY = Math.abs(mj[1].getY() - y2)/4;
        if(mj[1].getY() > y2)
            deltaY = -deltaY;
        
        comandos.add(new ComandoIrA(1,
                contrarios[marcar[1]].getX()+deltaX,
                contrarios[marcar[1]].getY()+deltaY));
        /*----------1----------*/
        
        if(sj.getMasCercanoDeBola() == 1)
            comandos.add(new ComandoIrA(1, x, y2));
        
        paseFatidico(1,3);
    }
    
    private void fernandoHierroVB()
    {
        double x = bola.getX(), y2 = bola.getY();
        
        int y = (int)(y2 / 1.5);
//        if (y > 100) y = 100;
//        if (y < 10) y = 10;
        comandos.add(new ComandoIrA(2,nValores[2][0], y));
        
        /*---------------------*///Mantener zona
//        if(y2 < 0)
//            y2 = 0;
//        if(x > 0)
//            x = 0;
        /*---------------------*/
        
        if(nJug2 == 2)
            comandos.add(new ComandoIrA(nJug2, x, y2));
        
        /*----------1----------*///Marcar
//        int marcar = sj.getContrarioMasCerca(mj[2].getX(), mj[2].getY());
//        int marcar = vistaMiPorteria[1];
        if(!cubre[2])
        {
            double d = 800.0;//2 * diagonal campo
            for(int i = 0; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[2][i] < d)
                {
                    d = dJugadoresMasPorteria[2][i];
                    marcar[2] = i;
                }
            cubierto[marcar[2]] = true;
            cubre [2] = true;
        }
            
//        if(mj[1].distance(contrarios[marcar]) < 30.0 &&
//                contrarios[marcar].getX() < -35.0 &&
//                contrarios[marcar].getY() < 0)
        double deltaX = Math.abs(mj[2].getX() - x)/4;
        if(mj[2].getX() > x)
            deltaX = -deltaX;
        double deltaY = Math.abs(mj[2].getY() - y2)/4;
        if(mj[2].getY() > y2)
            deltaY = -deltaY;
        
        comandos.add(new ComandoIrA(2,
                contrarios[marcar[2]].getX()+deltaX,
                contrarios[marcar[2]].getY()+deltaY));
        /*----------1----------*/
        
        if(sj.getMasCercanoDeBola() == 2)
            comandos.add(new ComandoIrA(2, x, y2));
        
        paseFatidico(2,4);
    }
    
    private void mj3VB()
    {
//        if(mj[3].distance(sj.getBola()) < 15.0)
//            comandos.add(new ComandoIrA(3,160,0));
        
//        comandos.add(new ComandoPase(3,
//        sj.getMiJugadorMasCerca(mj[3].getX(), mj[3].getY())));
        
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
//        if(y < -70)
//            y = 70;
//        else if(y > 70)
//            y = 70;
//        if(x > 30)
//            x = 30;
//        else if(x < -80)
//            x = -80;
        /*---------------------*/
        
        /*----------1----------*///Marcar
        
        if(!cubre[3])
        {
            double d = 800.0;//2 * diagonal campo
            for(int i = 0; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[3][i] < d)
                {
                    d = dJugadoresMasPorteria[3][i];
                    marcar[3] = i;
                }
            cubierto[marcar[3]] = true;
            cubre [3] = true;
        }
            
        double deltaX = Math.abs(mj[3].getX() - x)/4;
        if(mj[3].getX() > x)
            deltaX = -deltaX;
        double deltaY = Math.abs(mj[3].getY() - y)/4;
        if(mj[3].getY() > y)
            deltaY = -deltaY;
        
        comandos.add(new ComandoIrA(3,
                contrarios[marcar[3]].getX()+deltaX,
                contrarios[marcar[3]].getY()+deltaY));
        /*----------1----------*/
        
        if(nJug2 == 3)
            comandos.add(new ComandoIrA(nJug2, x, y));
         
//        if(r.nextBoolean())
//            paseDeLaMuerte(3,9);
//        else
//            paseDeLaMuerte(3,10);
        paseFatidico(3, 6);
    }
    
    private void mj4VB()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
//        if(y > 0)
//            y = 0;
//        if(x > 40)
//            x = 40;
//        else if(x < -100)
//            x = -100;
        /*---------------------*/
        
        /*----------1----------*///Marcar
        
        if(!cubre[4])
        {
            double d = 800.0;//2 * diagonal campo
            for(int i = 0; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[4][i] < d)
                {
                    d = dJugadoresMasPorteria[4][i];
                    marcar[4] = i;
                }
            cubierto[marcar[4]] = true;
            cubre [4] = true;
        }
            
        double deltaX = Math.abs(mj[4].getX() - x)/4;
        if(mj[4].getX() > x)
            deltaX = -deltaX;
        double deltaY = Math.abs(mj[4].getY() - y)/4;
        if(mj[4].getY() > y)
            deltaY = -deltaY;
        
        comandos.add(new ComandoIrA(4,
                contrarios[marcar[4]].getX()+deltaX,
                contrarios[marcar[4]].getY()+deltaY));
        /*----------1----------*/
        
        if(nJug2 == 4)
            comandos.add(new ComandoIrA(nJug2, x, y));
        
//        paseDeLaMuerte(4,9);
        paseFatidico(4, 7);
    }
    
    private void mj5VB()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
//        if(y < 0)
//            y = 0;
//        if(x > 40)
//            x = 40;
//        else if(x < -100)
//            x = -100;
        /*---------------------*/
        
        /*----------1----------*///Marcar
/*        
        if(!cubre[5])
        {
            double d = 800.0;//2 * diagonal campo
            for(int i = 0; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[5][i] < d)
                {
                    d = dJugadoresMasPorteria[5][i];
                    marcar[5] = i;
                }
            cubierto[marcar[5]] = true;
            cubre [5] = true;
        }
            
        double deltaX = Math.abs(mj[5].getX() - x)/4;
        if(mj[5].getX() > x)
            deltaX = -deltaX;
        double deltaY = Math.abs(mj[5].getY() - y)/4;
        if(mj[5].getY() > y)
            deltaY = -deltaY;
        
        comandos.add(new ComandoIrA(5,
                contrarios[marcar[5]].getX()+deltaX,
                contrarios[marcar[5]].getY()+deltaY));
        /*----------1----------*/
        
        if(nJug2 == 5)
            comandos.add(new ComandoIrA(nJug2, x, y));
        
//        paseDeLaMuerte(5,10);
        paseFatidico(5, 7);
    }
    
    private void mj6VB()
    {
         double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
         if(y < -70)
             y = 70;
         else if(y > 70)
             y = 70;
         if(x < -30)
             x = -30;
         else if(x > 80)
             x = 80;
         /*---------------------*/
         
         if(nJug2 == 6)
             comandos.add(new ComandoIrA(nJug2, x, y));
         
//         if(x > 30.0)
//             tiroDeLaAceitunaALaLuna(9);
//         else if(r.nextBoolean())
////             comandos.add(new ComandoPase(6,9));
//             paseDeLaMuerte(6, 9);
//         else
////             comandos.add(new ComandoPase(6,10));
//             paseDeLaMuerte(6, 10);
         paseFatidico(6, 8);
    }
    
    private void mj7VB()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
        if(y > 0)
            y = 0;
        if(x > 150)
            x = 150;
        else if(x < -30)
            x = -30;
        /*---------------------*/
        
        if(nJug2 == 7)
            comandos.add(new ComandoIrA(nJug2, x, y));
        
        if(mj[7].distance(new Point(160, 0)) < 100)
            tiroDeLaAceitunaALaLuna(7);
        else
            paseDeLaMuerte(7, 9);
    }
    
    private void mj8VB()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
        if(y < 0)
            y = 0;
        if(x > 150)
            x = 150;
        else if(x < -30)
            x = -30;
        /*---------------------*/
        
        if(nJug2 == 8)
            comandos.add(new ComandoIrA(nJug2, x, y));
        
        if(mj[8].distance(new Point(160, 0)) < 100)
            tiroDeLaAceitunaALaLuna(8);
        else paseDeLaMuerte(8,10);
    }
    
    private void leoMessiVB()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
        if(y > 0)
            y = 0;
        if(x < 0)
            x = 0;
        /*---------------------*/
        
        if(nJug2 == 9)
            comandos.add(new ComandoIrA(nJug2, x, y));
        
        if(puedeTirarseUnFarol(9) && bola.distance(new Point(0, 0)) < 10)
            paseFatidico(9, 1);
        
//        else if(mj[9].distance(new Point(160, 0)) < 100.0)
//            if(1.5*mj[9].getX()-mj[9].getY() > 270.0 ||
//                1.5*mj[9].getX()+mj[9].getY() > 270.0)
//                paseDeLaMuerte(9, listoParaRematar());
//            else
//                tiroDeLaAceitunaALaLuna(9);
//        else
////            comandos.add(new ComandoPase(9,10));
////            comandos.add(new ComandoGolpearBola(9, 50.0, -120.0));
////            if(mj[9].x < 100)
////                paseFatidico(9, masSoloQueLaUna());
////            else
////                paseFatidico(9, listoParaRematar());
//            comandos.add(new ComandoTiroAPuerta(9, mj[10].y/10));
        if(mj[9].distance(new Point(160, 0)) < 100)
            tiroDeLaAceitunaALaLuna(9);
        else paseDeLaMuerte(9,10);
    }
    
    private void ronaldoVB()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
        if(y < 0)
            y = 0;
        if(x < 0)
            x = 0;
        /*---------------------*/
        
        if(nJug2 == 10)
            comandos.add(new ComandoIrA(nJug2, x, y));
                
        if(puedeTirarseUnFarol(10) && bola.distance(new Point(0, 0)) < 10)
            paseFatidico(10, 2);
        
        if(mj[10].distance(new Point(160, 0)) < 100.0)
            if(1.5*mj[10].getX()-mj[10].getY() > 270.0 ||
                1.5*mj[10].getX()+mj[10].getY() > 270.0)
                paseDeLaMuerte(10, listoParaRematar());
            else
                tiroDeLaAceitunaALaLuna(10);
        else
//            comandos.add(new ComandoPase(10,9));
//            comandos.add(new ComandoGolpearBola(10, 50.0, 120.0));
//            if(mj[10].x < 100)
//                paseFatidico(10, masSoloQueLaUna());
//            else
//                paseFatidico(10, listoParaRematar());
            comandos.add(new ComandoTiroAPuerta(10, mj[9].y/10));
    }
    
    private void saqueDePuertaNower()
    {
        int [] convocados = new int [11];
        int entranEnLaConvocatoria = 0;
        
        //Excluimos a Casillas, que es quien saca de puerta
        for(int i = 1; i < 11; i++)
        {
            if(mj[i].x > -80 && mj[i].x < 80)
                convocados[entranEnLaConvocatoria++] = i;
        }
        
        if(entranEnLaConvocatoria == 0)
            if(mj[0].y < -60)
                paseFatidico(0, 5);
            else if(mj[0].y > 60)
                paseFatidico(0,6);
            else if(r.nextBoolean())
                paseFatidico(0,3);
            else
                paseFatidico(0,4);
        else
        {
            int canutee = convocados[0];
            for(int i = 0; i < entranEnLaConvocatoria; i++)
                if(dJugadores[convocados[i]][moscardon[convocados[i]]] >
                   dJugadores[canutee][moscardon[canutee]])
                    canutee = convocados[i];
            
            paseFatidico(0, canutee);
        }
    }
    
    private void casillasFC()
    {
        double x = bola.getX(), y2 = bola.getY();
        
        //Movimiento portero
        int y = (int)(y2 / 1.5);
        if (y < -30) y = -30;
        if (y > 30) y = 30;
        comandos.add(new ComandoIrA(0,nValores[0][0], y));
        
        double /*casillasX = mj[0].getX(),*/ casillasY = mj[0].getY();
        
        if((casillasY > 65 || casillasY < -65) &&
                mj[0].distance(bola) > contrarios[getListaCercanos
                 (contrarios, bola)[0]].distance(bola))
        {
            estamosTramandoAlgo[0] = true;
            comandos.add(loQueTramamos[0] =
                    new ComandoIrA(0, nValores[0][0], nValores[0][1]));
            escenarioDeLaTrama[0] = new Point(nValores[0][0], nValores[0][1]);
        }
        else if(sj.getMasCercanoDeBola() == 0)
            comandos.add(new ComandoIrA(0, x, y2));
        
        /*---------------------*///Mantener zona
//        if(y2 < 0)
//            y2 = 0;
//        if(x > 150)
//            x = 150;
//        else if(x < -30)
//            x = -30;
        /*---------------------*/
        
        if(nJug2 == 0)
            comandos.add(new ComandoIrA(nJug2, x, y2));
        
//        comandos.add(new ComandoPase(0,3));
//        if(casillasY < -60)
//            paseFatidico(0, 7);
//        else if(casillasY > 60)
//            paseFatidico(0,8);
//        else if(r.nextBoolean())
//            paseFatidico(0,4);
//        else
//            paseFatidico(0,5);
        saqueDePuertaEstiloPanenca();
    }
    
    private void cannavaroFC()
    {
        double x = bola.getX(), y2 = bola.getY();
        
        int y = (int)(y2 / 1.5);
//        if (y < -100) y = -100;
//        if (y > -10) y = -10;
//        comandos.add(new ComandoIrA(1,nValores[1][0], y));
        
        /*---------------------*///Mantener zona
//        if(y2 > 0)
//            y = 0;
//        if(x > 0)
//            x = 0;
        /*---------------------*/
        
        if(nJug2 == 1)
            comandos.add(new ComandoIrA(nJug2, x, y2));
        
        /*----------1----------*///Marcar
//        int marcar = sj.getContrarioMasCerca(mj[1].getX(), mj[1].getY());
//        int marcar = vistaMiPorteria[0];
        if(!cubre[1])
        {
            marcar[1] = 0;
            double d = dJugadoresMasPorteria[1][0];
            for(int i = 1; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[1][i] < d)
                {
                    d = dJugadoresMasPorteria[1][i];
                    marcar[1] = i;
                }
            cubierto[marcar[1]] = true;
            cubre [1] = true;
        }
            
//        if(vieneElCoco)
//            comandos.add(new ComandoIrA(1,
//                    contrarios[marcar[1]].getX(),
//                    contrarios[marcar[1]].getY()));
//        else
//        {
        double deltaX = Math.abs(mj[1].getX() - x)/4;
        if(mj[1].getX() > x)
            deltaX = -deltaX;
        if(mj[1].distance(bola) < tierraALaVista[1] &&
                mj[1].distance(contrarios[marcar[1]]) < 30)
            comandos.add(new ComandoIrA(1,
                    contrarios[marcar[1]].getX()+deltaX, bola.getY()));
        else
        {
            double deltaY = Math.abs(mj[1].getY() - y2)/4;
            if(mj[1].getY() > y2)
                deltaY = -deltaY;
            
            comandos.add(new ComandoIrA(1,
                    contrarios[marcar[1]].getX()+deltaX,
                    contrarios[marcar[1]].getY()+deltaY));
        }
        /*----------1----------*/
        
        if(sj.getMasCercanoDeBola() == 1)
            comandos.add(new ComandoIrA(1, x, y2));
        
        paseDestoQueSaleLaBotaVolando(1, new int [] {3, 5, 6, 8, 9, 10});
    }
    
    private void fernandoHierroFC()
    {
        double x = bola.getX(), y2 = bola.getY();
        
        int y = (int)(y2 / 1.5);
//        if (y > 100) y = 100;
//        if (y < 10) y = 10;
//        comandos.add(new ComandoIrA(2,nValores[2][0], y));
        
        /*---------------------*///Mantener zona
//        if(y2 < 0)
//            y2 = 0;
//        if(x > 0)
//            x = 0;
        /*---------------------*/
        
        if(nJug2 == 2)
            comandos.add(new ComandoIrA(nJug2, x, y2));
        
        /*----------1----------*///Marcar
//        int marcar = sj.getContrarioMasCerca(mj[2].getX(), mj[2].getY());
//        int marcar = vistaMiPorteria[1];
        if(!cubre[2])
        {
            double d = 800.0;//2 * diagonal campo
            for(int i = 0; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[2][i] < d)
                {
                    d = dJugadoresMasPorteria[2][i];
                    marcar[2] = i;
                }
            cubierto[marcar[2]] = true;
            cubre [2] = true;
        }
            
//        if(vieneElCoco)
//            comandos.add(new ComandoIrA(2,
//                    contrarios[marcar[2]].getX(),
//                    contrarios[marcar[2]].getY()));
//        else
//        {
        double deltaX = Math.abs(mj[2].getX() - x)/4;
        if(mj[2].getX() > x)
            deltaX = -deltaX;
        if(mj[2].distance(bola) < tierraALaVista[2] &&
                mj[2].distance(contrarios[marcar[2]]) < 30)
            comandos.add(new ComandoIrA(2,
                    contrarios[marcar[2]].getX()+deltaX, bola.getY()));
        else
        {
            double deltaY = Math.abs(mj[2].getY() - y2)/4;
            if(mj[2].getY() > y2)
                deltaY = -deltaY;
            
            comandos.add(new ComandoIrA(2,
                    contrarios[marcar[2]].getX()+deltaX,
                    contrarios[marcar[2]].getY()+deltaY));
        }
        /*----------1----------*/
        
        if(sj.getMasCercanoDeBola() == 2)
            comandos.add(new ComandoIrA(2, x, y2));
        
        paseDestoQueSaleLaBotaVolando(2,new int [] {4, 5, 7, 8, 9, 10} );
    }
    
    private void mj3FC()
    {
//        if(mj[3].distance(sj.getBola()) < 15.0)
//            comandos.add(new ComandoIrA(3,160,0));
        
//        comandos.add(new ComandoPase(3,
//        sj.getMiJugadorMasCerca(mj[3].getX(), mj[3].getY())));
        
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
//        if(y < -70)
//            y = 70;
//        else if(y > 70)
//            y = 70;
//        if(x > 30)
//            x = 30;
//        else if(x < -80)
//            x = -80;
        /*---------------------*/
        
        /*----------1----------*///Marcar
        
        if(!cubre[3])
        {
            double d = 800.0;//2 * diagonal campo
            for(int i = 0; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[3][i] < d)
                {
                    d = dJugadoresMasPorteria[3][i];
                    marcar[3] = i;
                }
            cubierto[marcar[3]] = true;
            cubre [3] = true;
        }
            
//        if(vieneElCoco)
//            comandos.add(new ComandoIrA(3,
//                    contrarios[marcar[3]].getX(),
//                    contrarios[marcar[3]].getY()));
//        else
//        {
        double deltaX = Math.abs(mj[3].getX() - x)/4;
        if(mj[3].getX() > x)
            deltaX = -deltaX;
        if(mj[3].distance(bola) < tierraALaVista[3] &&
                mj[3].distance(contrarios[marcar[3]]) < 30)
            comandos.add(new ComandoIrA(3,
                    contrarios[marcar[3]].getX()+deltaX, bola.getY()));
        else
        {
            double deltaY = Math.abs(mj[3].getY() - y)/4;
            if(mj[3].getY() > y)
                deltaY = -deltaY;
            
            comandos.add(new ComandoIrA(3,
                    contrarios[marcar[3]].getX()+deltaX,
                    contrarios[marcar[3]].getY()+deltaY));
        }
        /*----------1----------*/
        
        if(nJug2 == 3)
            comandos.add(new ComandoIrA(nJug2, x, y));
         
//        if(r.nextBoolean())
//            paseDeLaMuerte(3,9);
//        else
//            paseDeLaMuerte(3,10);
        paseDestoQueSaleLaBotaVolando(3, new int [] {5, 6, 7, 8, 9, 10});
    }
    
    private void mj4FC()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
//        if(y > 0)
//            y = 0;
//        if(x > 40)
//            x = 40;
//        else if(x < -100)
//            x = -100;
        /*---------------------*/
        
        /*----------1----------*///Marcar
        
        if(!cubre[4])
        {
            double d = 800.0;//2 * diagonal campo
            for(int i = 0; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[4][i] < d)
                {
                    d = dJugadoresMasPorteria[4][i];
                    marcar[4] = i;
                }
            cubierto[marcar[4]] = true;
            cubre [4] = true;
        }
            
//        if(vieneElCoco)
//            comandos.add(new ComandoIrA(4,
//                    contrarios[marcar[4]].getX(),
//                    contrarios[marcar[4]].getY()));
//        else
//        {
        double deltaX = Math.abs(mj[4].getX() - x)/4;
        if(mj[4].getX() > x)
            deltaX = -deltaX;
        if(mj[4].distance(bola) < tierraALaVista[4] &&
                mj[4].distance(contrarios[marcar[4]]) < 30)
            comandos.add(new ComandoIrA(4,
                    contrarios[marcar[4]].getX()+deltaX, bola.getY()));
        else
        {
            double deltaY = Math.abs(mj[4].getY() - y)/4;
            if(mj[4].getY() > y)
                deltaY = -deltaY;
            
            comandos.add(new ComandoIrA(4,
                    contrarios[marcar[4]].getX()+deltaX,
                    contrarios[marcar[4]].getY()+deltaY));
        }
        /*----------1----------*/
        
        if(nJug2 == 4)
            comandos.add(new ComandoIrA(nJug2, x, y));
        
//        paseDeLaMuerte(4,9);
        paseDestoQueSaleLaBotaVolando(4, new int [] {5, 7, 6, 8, 9, 10});
    }
    
    private void mj5FC()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
        if(y < -85)
            y = -85;
        else if(y > 85)
            y = 85;
        if(x > -100)
            x = -100;
        else if(x < 100)
            x = 100;
        /*---------------------*/
        
        /*----------1----------*///Marcar
/*        
        if(!cubre[5])
        {
            double d = 800.0;//2 * diagonal campo
            for(int i = 0; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[5][i] < d)
                {
                    d = dJugadoresMasPorteria[5][i];
                    marcar[5] = i;
                }
            cubierto[marcar[5]] = true;
            cubre [5] = true;
        }
            
        double deltaX = Math.abs(mj[5].getX() - x)/4;
        if(mj[5].getX() > x)
            deltaX = -deltaX;
        double deltaY = Math.abs(mj[5].getY() - y)/4;
        if(mj[5].getY() > y)
            deltaY = -deltaY;
        
        comandos.add(new ComandoIrA(5,
                contrarios[marcar[5]].getX()+deltaX,
                contrarios[marcar[5]].getY()+deltaY));
        /*----------1----------*/
        
        if(nJug2 == 5)
            comandos.add(new ComandoIrA(nJug2, x, y));
        
        saltoDeLaRana(5);
        
//        paseDeLaMuerte(5,10);
        paseFulminante(5, new int [] {6, 7, 8, 9, 10});
    }
    
    private void mj6FC()
    {
         double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
         if(y > 10)
             y = 10;
         if(x < -30)
             x = -30;
         /*---------------------*/
         
         if(nJug2 == 6)
             comandos.add(new ComandoIrA(nJug2, x, y));
         
//         if(x > 30.0)
//             tiroDeLaAceitunaALaLuna(9);
//         else if(r.nextBoolean())
////             comandos.add(new ComandoPase(6,9));
//             paseDeLaMuerte(6, 9);
//         else
////             comandos.add(new ComandoPase(6,10));
//             paseDeLaMuerte(6, 10);
         if(mj[6].distance(new Point(160, 0)) < 100)
             tiroDeLaAceitunaALaLuna(6);
         else
             paseFulminante(6, new int [] {8, 9, 10});
    }
    
    private void mj7FC()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
        if(y < -10)
             y = -10;
         if(x < -30)
             x = -30;
        /*---------------------*/
        
        if(nJug2 == 7)
            comandos.add(new ComandoIrA(nJug2, x, y));
        
        if(mj[7].distance(new Point(160, 0)) < 100)
            tiroDeLaAceitunaALaLuna(7);
        else
            paseFulminante(7, new int [] {8, 9, 10});
    }
    
    private void mj8FC()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
        if(y > 10)
            y = 10;
        if(x < 0)
            x = 0;
        /*---------------------*/
        
        if(nJug2 == 8)
            comandos.add(new ComandoIrA(nJug2, x, y));
        
//        if(mj[8].distance(new Point(160, 0)) < 100)
        if(1.5*mj[8].getX()-mj[8].getY() > 270.0 ||
                1.5*mj[8].getX()+mj[8].getY() > 270.0)
            paseDeLaMuerte(8, listoParaRematar());
        else
            tiroDeLaAceitunaALaLuna(8);
//        else paseDeLaMuerte(8,10);
    }
    
    private void leoMessiFC()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
        if(y < -10)
            y = -10;
        if(x < 0)
            x = 0;
        /*---------------------*/
        
        if(nJug2 == 9)
            comandos.add(new ComandoIrA(nJug2, x, y));
        
//        if(puedeTirarseUnFarol(9) && bola.distance(new Point(0, 0)) < 10)
//            paseFatidico(9, 1);
        
//        else if(mj[9].distance(new Point(160, 0)) < 100.0)
        if(1.5*mj[9].getX()-mj[9].getY() > 270.0 ||
                1.5*mj[9].getX()+mj[9].getY() > 270.0)
            paseDeLaMuerte(9, listoParaRematar());
        else
            tiroDeLaAceitunaALaLuna(9);
//        else
////            comandos.add(new ComandoPase(9,10));
////            comandos.add(new ComandoGolpearBola(9, 50.0, -120.0));
////            if(mj[9].x < 100)
////                paseFatidico(9, masSoloQueLaUna());
////            else
////                paseFatidico(9, listoParaRematar());
//            comandos.add(new ComandoTiroAPuerta(9, mj[10].y/10));
//        if(mj[9].distance(new Point(160, 0)) < 100)
//        else paseDeLaMuerte(9,10);
    }
    
    private void ronaldoFC()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
        if(x < 0)
            x = 0;
        /*---------------------*/
        
        if(nJug2 == 10)
            comandos.add(new ComandoIrA(nJug2, x, y));
                
        if(puedeTirarseUnFarol(10) && bola.distance(new Point(0, 0)) < 10)
            if(r.nextBoolean())
                paseFatidico(10, 1);
            else
                paseFatidico(10, 2);
        
//        if(mj[10].distance(new Point(160, 0)) < 100.0)
//            if(1.5*mj[10].getX()-mj[10].getY() > 270.0 ||
//                1.5*mj[10].getX()+mj[10].getY() > 270.0)
//                paseDeLaMuerte(10, listoParaRematar());
//            else
                tiroDeLaAceitunaALaLuna(10);
//        else
//            comandos.add(new ComandoPase(10,9));
//            comandos.add(new ComandoGolpearBola(10, 50.0, 120.0));
//            if(mj[10].x < 100)
//                paseFatidico(10, masSoloQueLaUna());
//            else
//                paseFatidico(10, listoParaRematar());
//            comandos.add(new ComandoTiroAPuerta(10, mj[9].y/10));
    }

    private void saqueDePuertaEstiloPanenca()
    {
        int [] convocados = new int [11];
        int entranEnLaConvocatoria = 0;
        
        //Excluimos a Casillas, que es quien saca de puerta
        for(int i = 1; i < 11; i++)
        {
            if(mj[i].x > -80 && mj[i].x < 80)
                convocados[entranEnLaConvocatoria++] = i;
        }
        
        if(entranEnLaConvocatoria == 0)
        {
            if(veoLaEspadaDeDamocles())
                tiroDeLaAceitunaALaLuna(0);//Para quitarse la espada de lo alto
            else if(mj[0].y < -60)
                paseFatidico(0, 6);
            else if(mj[0].y > 60)
                paseFatidico(0,7);
            else if(r.nextBoolean())
                paseFatidico(0,3);
            else
                paseFatidico(0,4);
        }
        else
        {
            int canutee = convocados[0];
            for(int i = 0; i < entranEnLaConvocatoria; i++)
                if(dJugadores[convocados[i]][moscardon[convocados[i]]] >
                   dJugadores[canutee][moscardon[canutee]])
                    canutee = convocados[i];
            
            paseFatidico(0, canutee);
        }
    }

    private void paseDestoQueSaleLaBotaVolando(int yo, int [] guys)
    {
        int conLosBrazosEnJarra = guys[0];
        for(int i = 0; i < guys.length; i++)
            if(dJugadores[guys[i]][moscardon[guys[i]]] >
                dJugadores[conLosBrazosEnJarra][moscardon[conLosBrazosEnJarra]])
                conLosBrazosEnJarra = guys[i];
        
        if(veoLaEspadaDeDamocles() &&
                mj[yo].x < -80 && mj[conLosBrazosEnJarra].x < -40)
            tiroDeLaAceitunaALaLuna(yo);
        else
            paseFatidico(yo, conLosBrazosEnJarra);
    }
    
    private void paseSubliminal(int yo, int [] guys)
    {
        int conLosBrazosEnJarra = guys[0];
        for(int i = 0; i < guys.length; i++)
        {
            Point puntoG = paseFatidicoModoMatrix(yo, guys[i]);
            
            if(dJugadores[guys[i]][moscardon[guys[i]]] >
                dJugadores[conLosBrazosEnJarra][moscardon[conLosBrazosEnJarra]]
               && puntoG.distance(mj[sj.getMiJugadorMasCerca(puntoG.getX(),
                    puntoG.getY())]) <
                  puntoG.distance(contrarios[
                    sj.getContrarioMasCerca(puntoG.getX(), puntoG.getY())]))
                conLosBrazosEnJarra = guys[i];
        }
        
        paseFatidico(yo, conLosBrazosEnJarra);
    }

    private void paseFulminante(int yo, int[] guys)
    {
        int conLosBrazosEnJarra = guys[0];
        for(int i = 0; i < guys.length; i++)
            if(dJugadores[guys[i]][moscardon[guys[i]]] >
                dJugadores[conLosBrazosEnJarra][moscardon[conLosBrazosEnJarra]])
                conLosBrazosEnJarra = guys[i];
        
        paseDeLaMuerte(yo, conLosBrazosEnJarra);
    }

    private void saltoDeLaRana(int laPantoja)
    {
        if(dJugadores[laPantoja][moscardon[laPantoja]] < 20.0)
            if(mj[laPantoja].distance(new Point
                (nValores[laPantoja][0], nValores[laPantoja][1])) > 40.0)
                //Colocarse
                comandos.add(new ComandoIrA(laPantoja,
                        nValores[laPantoja][0], nValores[laPantoja][1]));
            else
                comandos.add(new ComandoIrA(laPantoja,
                        bola.getX(), bola.getY()));
    }
    
    private Point paseFatidicoModoMatrix(int yo, int aTi)
    {
        if(puedeTirarseUnFarol(yo))
        {
            //Mientras el portero no suba a rematar no tontear con l
            //Si est demasiado cerca, proceder con el despiste de Ronaldio
            if(aTi == 0 || mj[yo].distance(mj[aTi]) < 20.0)
            {
                if(vigilarLlamadasRecursivas++ < 11)
                {
                    int samuelEtto = masSoloQueLaUna();
                    return paseFatidicoModoMatrix(yo, samuelEtto);
                }
                else
                {
                    vigilarLlamadasRecursivas = 0;
                    
                    if(mj[yo].distance(new Point(160, 0)) < 100)
                        return mj[yo];
                    else
                        if(yo != piernaArmada[0])
                            return mj[piernaArmada[0]];
                        else
                            return mj[piernaArmada[1]];
                }
            }
            else
            {
                vigilarLlamadasRecursivas = 0;
                return new Point (
                        (mj[yo].x + mj[aTi].x) / 2,
                        (mj[yo].y + mj[aTi].y) / 2);
            }
        }
        return mj[yo];
    }

    private boolean veoLaEspadaDeDamocles()
    {
        for(int i = 0; i < 11; i++)
            if(contrarios[i].x < -50)
                return true;
        return false;
    }
    
    private void casillasM()
    {
        double x = bola.getX(), y2 = bola.getY();
        
        //Movimiento portero
        double noCortaElMarSinoVuela = (elsaPataki * -160.0 + devon);
        if(noCortaElMarSinoVuela > -30.0 && noCortaElMarSinoVuela < 30.0)
            comandos.add(new ComandoIrA
                    (0, nValores[0][0], noCortaElMarSinoVuela));
        else
        {
            int y = (int)(y2 / 1.5);
            comandos.add(new ComandoIrA
                    (0, nValores[0][0], y < -30 ? -30 : y > 30 ? 30 : y));
        }
        
        double /*casillasX = mj[0].getX(),*/ casillasY = mj[0].getY();
        
        if((casillasY > 65 || casillasY < -65) &&
                mj[0].distance(bola) > contrarios[getListaCercanos
                 (contrarios, bola)[0]].distance(bola))
        {
            estamosTramandoAlgo[0] = true;
            comandos.add(loQueTramamos[0] =
                    new ComandoIrA(0, nValores[0][0], nValores[0][1]));
            escenarioDeLaTrama[0] = new Point(nValores[0][0], nValores[0][1]);
        }
        else if(sj.getMasCercanoDeBola() == 0)
            comandos.add(new ComandoIrA(0, x, y2));
        
        /*---------------------*///Mantener zona
//        if(y2 < 0)
//            y2 = 0;
//        if(x > 150)
//            x = 150;
//        else if(x < -30)
//            x = -30;
        /*---------------------*/
        
        if(nJug2 == 0)
            comandos.add(new ComandoIrA(nJug2, x, y2));
        
//        comandos.add(new ComandoPase(0,3));
//        if(casillasY < -60)
//            paseFatidico(0, 7);
//        else if(casillasY > 60)
//            paseFatidico(0,8);
//        else if(r.nextBoolean())
//            paseFatidico(0,4);
//        else
//            paseFatidico(0,5);
//        saqueDeEspuerta();
        saqueDeEspartaco();
    }
    
    private void cannavaroM()
    {
        double x = bola.getX(), y2 = bola.getY();
        
        int y = (int)(y2 / 1.5);
        
        /*----------1----------*///Marcar
//        int marcar = sj.getContrarioMasCerca(mj[1].getX(), mj[1].getY());
//        int marcar = vistaMiPorteria[0];
        if(!cubre[1])
        {
            marcar[1] = 0;
            double d = dJugadoresMasPorteria[1][0];
            for(int i = 1; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[1][i] < d)
                {
                    d = dJugadoresMasPorteria[1][i];
                    marcar[1] = i;
                }
            cubierto[marcar[1]] = true;
            cubre [1] = true;
        }
            
//        if(vieneElCoco)
//            comandos.add(new ComandoIrA(1,
//                    contrarios[marcar[1]].getX(),
//                    contrarios[marcar[1]].getY()));
//        else
//        {
        double deltaX = Math.abs(mj[1].getX() - x)/4;
        if(mj[1].getX() > x)
            deltaX = -deltaX;
        if(mj[1].distance(bola) < tierraALaVista[1] &&
                mj[1].distance(contrarios[marcar[1]]) < 30)
            comandos.add(new ComandoIrA(1,
                    contrarios[marcar[1]].getX()+deltaX, bola.getY()));
        else
        {
            double deltaY = Math.abs(mj[1].getY() - y2)/4;
            if(mj[1].getY() > y2)
                deltaY = -deltaY;
            
            comandos.add(new ComandoIrA(1,
                    contrarios[marcar[1]].getX()+deltaX,
                    contrarios[marcar[1]].getY()+deltaY));
        }
        /*----------1----------*/
        
//        if(!chuparBanquillo())
//            paseDestoQueSaleLaBotaVolando(1, new int [] {4, 8, 7, 9});
//        aparicionesMarianasAZidaneEpisodio3(1);
        aparicionesMarianasAZidaneEpisodio5(1);
        
        if(sj.getMasCercanoDeBola() == 1)
            comandos.add(new ComandoIrA(1, x, y2));
        else if(nJug2 == 1)
            comandos.add(new ComandoIrA(nJug2, x, y2));
    }
    
    private void fernandoHierroM()
    {
        double x = bola.getX(), y2 = bola.getY();
        
        int y = (int)(y2 / 1.5);
        
        /*----------1----------*///Marcar
//        int marcar = sj.getContrarioMasCerca(mj[2].getX(), mj[2].getY());
//        int marcar = vistaMiPorteria[1];
        if(!cubre[2])
        {
            double d = 800.0;//2 * diagonal campo
            for(int i = 0; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[2][i] < d)
                {
                    d = dJugadoresMasPorteria[2][i];
                    marcar[2] = i;
                }
            cubierto[marcar[2]] = true;
            cubre [2] = true;
        }
            
//        if(vieneElCoco)
//            comandos.add(new ComandoIrA(2,
//                    contrarios[marcar[2]].getX(),
//                    contrarios[marcar[2]].getY()));
//        else
//        {
        double deltaX = Math.abs(mj[2].getX() - x)/4;
        if(mj[2].getX() > x)
            deltaX = -deltaX;
        if(mj[2].distance(bola) < tierraALaVista[2] &&
                mj[2].distance(contrarios[marcar[2]]) < 30)
            comandos.add(new ComandoIrA(2,
                    contrarios[marcar[2]].getX()+deltaX, bola.getY()));
        else
        {
            double deltaY = Math.abs(mj[2].getY() - y2)/4;
            if(mj[2].getY() > y2)
                deltaY = -deltaY;
            
            comandos.add(new ComandoIrA(2,
                    contrarios[marcar[2]].getX()+deltaX,
                    contrarios[marcar[2]].getY()+deltaY));
        }
        /*----------1----------*/
        
//        if(!chuparBanquillo())
//            paseDestoQueSaleLaBotaVolando(2,new int [] {4, 8, 6, 10, 7} );
//        aparicionesMarianasAZidaneEpisodio3(2);
        aparicionesMarianasAZidaneEpisodio5(2);
        
        if(sj.getMasCercanoDeBola() == 2)
            comandos.add(new ComandoIrA(2, x, y2));
        else if(nJug2 == 2)
            comandos.add(new ComandoIrA(nJug2, x, y2));
    }
    
    private void mj3M()
    {
//        if(mj[3].distance(sj.getBola()) < 15.0)
//            comandos.add(new ComandoIrA(3,160,0));
        
//        comandos.add(new ComandoPase(3,
//        sj.getMiJugadorMasCerca(mj[3].getX(), mj[3].getY())));
        
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
//        if(y < -70)
//            y = 70;
//        else if(y > 70)
//            y = 70;
//        if(x > 30)
//            x = 30;
//        else if(x < -80)
//            x = -80;
        /*---------------------*/
        
        /*----------1----------*///Marcar
        
        if(!cubre[3])
        {
            double d = 800.0;//2 * diagonal campo
            for(int i = 0; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[3][i] < d)
                {
                    d = dJugadoresMasPorteria[3][i];
                    marcar[3] = i;
                }
            cubierto[marcar[3]] = true;
            cubre [3] = true;
        }
            
//        if(vieneElCoco)
//            comandos.add(new ComandoIrA(3,
//                    contrarios[marcar[3]].getX(),
//                    contrarios[marcar[3]].getY()));
//        else
//        {
        double deltaX = Math.abs(mj[3].getX() - x)/4;
        if(mj[3].getX() > x)
            deltaX = -deltaX;
        if(mj[3].distance(bola) < tierraALaVista[3] &&
                mj[3].distance(contrarios[marcar[3]]) < 30)
            comandos.add(new ComandoIrA(3,
                    contrarios[marcar[3]].getX()+deltaX, bola.getY()));
        else
        {
            double deltaY = Math.abs(mj[3].getY() - y)/4;
            if(mj[3].getY() > y)
                deltaY = -deltaY;
            
            comandos.add(new ComandoIrA(3,
                    contrarios[marcar[3]].getX()+deltaX,
                    contrarios[marcar[3]].getY()+deltaY));
        }
        /*----------1----------*/
         
//        if(r.nextBoolean())
//            paseDeLaMuerte(3,9);
//        else
//            paseDeLaMuerte(3,10);
//        if(!chuparBanquillo())
//            paseDestoQueSaleLaBotaVolando(3, new int [] {6, 10, 7});
//        aparicionesMarianasAZidaneEpisodio3(3);
        aparicionesMarianasAZidaneEpisodio5(3);
        
        if(nJug2 == 3)
            comandos.add(new ComandoIrA(nJug2, x, y));
        else if(sj.getMasCercanoDeBola() == 3)
            comandos.add(new ComandoIrA(3, x, y));
    }
    
    private void mj4M()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
//        if(y > 0)
//            y = 0;
//        if(x > 40)
//            x = 40;
//        else if(x < -100)
//            x = -100;
        /*---------------------*/
        
        /*----------1----------*///Marcar
        
/*        if(!cubre[4])
        {
            double d = 800.0;//2 * diagonal campo
            for(int i = 0; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[4][i] < d)
                {
                    d = dJugadoresMasPorteria[4][i];
                    marcar[4] = i;
                }
            cubierto[marcar[4]] = true;
            cubre [4] = true;
        }
            
//        if(vieneElCoco)
//            comandos.add(new ComandoIrA(4,
//                    contrarios[marcar[4]].getX(),
//                    contrarios[marcar[4]].getY()));
//        else
//        {
        double deltaX = Math.abs(mj[4].getX() - x)/4;
        if(mj[4].getX() > x)
            deltaX = -deltaX;
        if(mj[4].distance(bola) < tierraALaVista[4] &&
                mj[4].distance(contrarios[marcar[4]]) < 30)
            comandos.add(new ComandoIrA(4,
                    contrarios[marcar[4]].getX()+deltaX, bola.getY()));
        else
        {
            double deltaY = Math.abs(mj[4].getY() - y)/4;
            if(mj[4].getY() > y)
                deltaY = -deltaY;
            
            comandos.add(new ComandoIrA(4,
                    contrarios[marcar[4]].getX()+deltaX,
                    contrarios[marcar[4]].getY()+deltaY));
        }
        /*----------1----------*/
        
//        paseDeLaMuerte(4,9);
//        paseDestoQueSaleLaBotaVolando(4, new int [] {5, 7, 6, 8, 9, 10});
//        if(siemprePositifvo(4, 8))
//            paseDeCastigo(4, 8);
//        else if(siemprePositifvo(4, 9))
//            paseDeCastigo(4, 9);
//        else
//            paseDeCastigo(4, 10);
//        chuparEstiloRonaldo(4);
//        chuparEstiloRonaldoBocadilloColgandoDeHilo(4);
//        chuparEstiloRonaldoEnElBarca(4);
//        chuparComoRobotRonaldo(4);
//        aparicionesMarianasAZidaneEpisodio3(4);
        aparicionesMarianasAZidaneEpisodio5(4);
        
        if(nJug2 == 4)
            comandos.add(new ComandoIrA(nJug2, x, y));
        else if(sj.getMasCercanoDeBola() == 4)
            comandos.add(new ComandoIrA(4, x, y));
    }
    
    private void mj5M()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
//        if(y < -85)
//            y = -85;
//        else if(y > 85)
//            y = 85;
//        if(x > -100)
//            x = -100;
//        else if(x < 100)
//            x = 100;
        /*---------------------*/
        
        /*----------1----------*///Marcar
        
        if(!cubre[5])
        {
            double d = 800.0;//2 * diagonal campo
            for(int i = 0; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[5][i] < d)
                {
                    d = dJugadoresMasPorteria[5][i];
                    marcar[5] = i;
                }
            cubierto[marcar[5]] = true;
            cubre [5] = true;
        }
            
        double deltaX = Math.abs(mj[5].getX() - x)/4;
        if(mj[5].getX() > x)
            deltaX = -deltaX;
        if(mj[5].distance(bola) < tierraALaVista[5] &&
                mj[5].distance(contrarios[marcar[5]]) < 30)
            comandos.add(new ComandoIrA(5,
                    contrarios[marcar[5]].getX()+deltaX, bola.getY()));
        else
        {
            double deltaY = Math.abs(mj[5].getY() - y)/4;
            if(mj[5].getY() > y)
                deltaY = -deltaY;
            
            comandos.add(new ComandoIrA(5,
                    contrarios[marcar[5]].getX()+deltaX,
                    contrarios[marcar[5]].getY()+deltaY));
        }
        /*----------1----------*/
        
        
//        saltoDeLaRana(5);
        
//        paseDeLaMuerte(5,10);
//        paseDeGilgamesh(5, new int [] {7, 8, 9, 10});
//        chuparEstiloRonaldo(5);
//        chuparEstiloRonaldoBocadilloColgandoDeHilo(5);
//        chuparEstiloRonaldoEnElBarca(5);
//        chuparComoRobotRonaldo(5);
//        aparicionesMarianasAZidaneEpisodio3(5);
        aparicionesMarianasAZidaneEpisodio5(5);
        
        if(nJug2 == 5)
            comandos.add(new ComandoIrA(nJug2, x, y));
        else if(sj.getMasCercanoDeBola() == 5)
            comandos.add(new ComandoIrA(5, x, y));
    }
    
    private void mj6M()
    {
         double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
//         if(y > 10)
//             y = 10;
//         if(x < -30)
//             x = -30;
         /*---------------------*/
         
//         if(siemprePositifvo(6, 10))
//             paseDeCastigo(6, 10);
//         else if(siemprePositifvo(6, 9))
//             paseDeCastigo(6, 9);
//         else
//             paseDeCastigo(6, 8);
//         chuparEstiloRonaldo(6);
//         chuparEstiloRonaldoBocadilloColgandoDeHilo(6);
//         chuparEstiloRonaldoEnElBarca(6);
//         chuparComoRobotRonaldo(6);
//         aparicionesMarianasAZidaneEpisodio3(6);
         aparicionesMarianasAZidaneEpisodio5(6);
         
         if(nJug2 == 6)
             comandos.add(new ComandoIrA(nJug2, x, y));
         else if(sj.getMasCercanoDeBola() == 6)
            comandos.add(new ComandoIrA(6, x, y));
    }
    
    private void mj7M()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
//        if(y < -10)
//             y = -10;
//         if(x < -30)
//             x = -30;
        /*---------------------*/
       
        
//        if(mj[7].distance(new Point(160, 0)) < 90.0)
//            tiroDeLaAceitunaALaLuna(7);
//        else
//            paseDeGilgamesh(7, new int [] {8, 9, 10});
//        chuparEstiloRonaldo(7);
//        chuparEstiloRonaldoBocadilloColgandoDeHilo(7);
//        chuparEstiloRonaldoEnElBarca(7);
//        chuparComoRobotRonaldo(7);
//        aparicionesMarianasAZidaneEpisodio3(7);
        aparicionesMarianasAZidaneEpisodio5(7); 
        
        if(nJug2 == 7)
            comandos.add(new ComandoIrA(nJug2, x, y));
        else if(sj.getMasCercanoDeBola() == 7)
            comandos.add(new ComandoIrA(7, x, y));
    }
    
    private void mj8M()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
        if(y > 10)
            y = 10;
        if(x < 0)
            x = 0;
        /*---------------------*/
        
        if(nJug2 == 8)
            comandos.add(new ComandoIrA(nJug2, x, y));
        else if(sj.getMasCercanoDeBola() == 8)
            comandos.add(new ComandoIrA(8, x, y));
        
//        if(!chuparBanquillo())
        if(mj[8].distance(160.0, 0.0) < 95)
            if(1.5*mj[8].getX()-mj[8].getY() > 270.0 ||
                1.5*mj[8].getX()+mj[8].getY() > 270.0)
                paseDeCastigo(8, listoParaRematar());
            else if(mj[8].distance(new Point(160, 0)) < 90.0)
                tiroDeLaAceitunaALaLuna(8);
            else if(siemprePositifvo(8, 9))
                paseDeCastigo(8, 9);
            else
                paseDeCastigo(8,10);
        else
            queVaAPasarElObus(8);
    }
    
    private void leoMessiM()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
        if(x < 0)
            x = 0;
        /*---------------------*/
        
        if(nJug2 == 9)
            comandos.add(new ComandoIrA(nJug2, x, y));
        else if(sj.getMasCercanoDeBola() == 9)
            comandos.add(new ComandoIrA(9, x, y));
        
//        if(!chuparBanquillo())
        if(puedeTirarseUnFarol(9) && bola.distance(new Point(0, 0)) < 10)
            if(r.nextBoolean())
//                paseFatidico(9, 1);
                paseImpresionantePorDetrasYPorDelante(9, 4);
            else
//                paseFatidico(9, 3);
                paseImpresionantePorDetrasYPorDelante(9, 6);
        
        else if(mj[9].distance(160.0, 0.0) < 95)
            if(1.5*mj[9].getX()-mj[9].getY() > 270.0 ||
                1.5*mj[9].getX()+mj[9].getY() > 270.0)
                paseDeCastigo(9, listoParaRematar());
            else if(mj[9].distance(new Point(160, 0)) < 90.0)
                tiroDeLaAceitunaALaLuna(9);
            else if(siemprePositifvo(10, 8))
                paseDeCastigo(9, 8);
            else
                paseDeCastigo(9,10);
        else
            queVaAPasarElObus(9);
    }
    
    private void ronaldoM()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
        if(y < -10)
            y = -10;
        if(x < 0)
            x = 0;
        /*---------------------*/
        
        if(nJug2 == 10)
            comandos.add(new ComandoIrA(nJug2, x, y));
        else if(sj.getMasCercanoDeBola() == 10)
            comandos.add(new ComandoIrA(10, x, y));
        
//        if(!chuparBanquillo())
        
        if(puedeTirarseUnFarol(10) && bola.distance(new Point(0, 0)) < 10)
            if(r.nextBoolean())
//                paseFatidico(10, 1);
                paseImpresionantePorDetrasYPorDelante(10, 4);
            else
//                paseFatidico(10, 3);
                paseImpresionantePorDetrasYPorDelante(10, 6);
        
        else if(mj[10].distance(160.0, 0.0) < 95)
            if(1.5*mj[10].getX()-mj[10].getY() > 270.0 ||
                1.5*mj[10].getX()+mj[10].getY() > 270.0)
                paseDeCastigo(10, listoParaRematar());
            else if(mj[10].distance(new Point(160, 0)) < 90.0)
                tiroDeLaAceitunaALaLuna(10);
            else if(siemprePositifvo(10, 9))
                paseDeCastigo(10, 9);
            else
                paseDeCastigo(10,8);
        else
            queVaAPasarElObus(10);
    }
    
    private void saqueDeEspuerta()
    {
        int [] convocados = new int [11];
        int entranEnLaConvocatoria = 0;
        
        //Excluimos a Casillas, que es quien saca de puerta
        for(int i = 1; i < 11; i++)
        {
            if(mj[i].x > -80 && mj[i].x < 80)
                convocados[entranEnLaConvocatoria++] = i;
        }
        
        if(entranEnLaConvocatoria == 0)
        {
            if(veoLaEspadaDeDamocles())
                tiroDeLaAceitunaALaLuna(0);//Para quitarse la espada de lo alto
            else if(mj[0].y < -60)
                paseFatidico(0, 8);
            else if(mj[0].y > 60)
                paseFatidico(0,10);
            else if(r.nextBoolean())
                paseFatidico(0,4);
            else
                paseFatidico(0,6);
        }
        else
        {
            int canutee = convocados[0];
            for(int i = 0; i < entranEnLaConvocatoria; i++)
                if(dJugadores[convocados[i]][moscardon[convocados[i]]] >
                   dJugadores[canutee][moscardon[canutee]])
                    canutee = convocados[i];
            
            paseFatidico(0, canutee);
        }
    }
    
    private void saqueDeEspartaco()
    {
        if(puedeTirarseUnFarol(0))
            paseFatidico(0, analizarSituacionConLaCabezaEnBlanco(0));
    }
    
    private void paseDeCastigo(int yo, int aTi)
    {
        //Mientras el portero no suba a rematar no tontear con l
        if(aTi == 0) return;
        
        int [] loCubren = getListaCercanos(contrarios, mj[aTi]);
        double umbral = 30.0;
        
        if(mj[aTi].distance(contrarios[loCubren[0]]) > umbral)
            paseFatidico(yo, aTi);
        else
        {
            
            if(puedeTirarseUnFarol(yo))
            {
                double puntoFatidicoX = mj[aTi].getX() + (160-mj[aTi].x) / 2.5,
                       puntoFatidicoY = mj[aTi].getY();
                
                puntoFatidicoX = puntoFatidicoX > 160.0? 160.0 : puntoFatidicoX;
                puntoFatidicoY = puntoFatidicoY > 120.0? 120.0 :
                    puntoFatidicoY < -120? -120 : puntoFatidicoY;
                
                comandos.add(new ComandoGolpearBola
                        (yo, puntoFatidicoX, puntoFatidicoY));
                
                
                estamosTramandoAlgo[aTi] = true;
                comandos.add( loQueTramamos[aTi] = new ComandoIrA
                        (aTi, puntoFatidicoX, puntoFatidicoY));
                escenarioDeLaTrama[aTi] =
                        new Point((int) puntoFatidicoX, (int) puntoFatidicoY);
                acariciarElBalon[aTi] = mj[aTi].distance(bola);
            }
        }

    }
    
    private void paseDeGilgamesh(int yo, int[] guys)
    {
        int conLosBrazosEnJarra = guys[0];
        for(int i = 0; i < guys.length; i++)
            if(dJugadores[guys[i]][moscardon[guys[i]]] >
                dJugadores[conLosBrazosEnJarra][moscardon[conLosBrazosEnJarra]])
                conLosBrazosEnJarra = guys[i];
        
        paseDeCastigo(yo, conLosBrazosEnJarra);
    }
    
    private void chuparEstiloRonaldoGrossoModo(int ronaldo)
    {
        if(mj[ronaldo].distance(160.0, 0.0) < 50.0)
                tiroDeLaAceitunaALaLuna(ronaldo);
        
        else if(puedeTirarseUnFarol(ronaldo))
        {
            
            double salirDerrapandoX = 160 - mj[ronaldo].x,
                   salirDerrapandoY = -mj[ronaldo].y;
            
            double alfa = Math.sqrt(900 /
                    (salirDerrapandoX*salirDerrapandoX +
                     salirDerrapandoY*salirDerrapandoY));//Teorema de Zidane
                
            double loQueElVientoSeLLevo = salirDerrapandoX *= alfa;
            salirDerrapandoY *= alfa;
            
            double toPalanteX = mj[ronaldo].getX() + salirDerrapandoX,
                   toPalanteY = mj[ronaldo].getY() + salirDerrapandoY;

            
            //No tomar rumbo a Brasil
//            if(toPalanteX > 160.0)
//            {
//                toPalanteX = 160.0;
//                salirDerrapandoX = 160.0 - mj[ronaldo].getX();
//            }
//            else if(toPalanteX < -160.0)
//            {
//                toPalanteX = -160.0;
//                salirDerrapandoX = -160.0 - mj[ronaldo].getX();
//            }
//            
//            if(toPalanteY > 120.0)
//            {
//                toPalanteY = 120.0;
//                salirDerrapandoY = 120.0 - mj[ronaldo].getY();
//            }
//            else if(toPalanteY < -120.0)
//            {
//                toPalanteY = -120.0;
//                salirDerrapandoY = -120.0 - mj[ronaldo].getY();
//            }
            //
            toPalanteX = toPalanteX > 160.0? 160.0 :
                    toPalanteX < -160.0 ? -160.0 : toPalanteX;
            toPalanteY = toPalanteY > 120.0? 120.0 :
                    toPalanteY < -120.0 ? -120.0 : toPalanteY;
            
            
            //Para regresar sobre el camino de las soluciones siempre positifvas
            boolean ahoraNegatifvo = true;
            //Para dar el voltio completo
            boolean complecionDelToston = false;
            
            for(int i = 0; i < contrarios.length; i++)
                if(contrarios[i].distance(toPalanteX, toPalanteY) < 20.0)
                {
                    //Agujas del reloj
                    if(complecionDelToston)
                    {
                        if(--salirDerrapandoX <= loQueElVientoSeLLevo)
                        {
                            /*Si tras este largo y tortuoso arriate quedamos
                              sobrecogidos al notar que ante nuestros pies se
                              perfila el infinito, eterno abismo de un bucle
                              infinito, impetrar clemencia a la Providencia.*/
                            tiroDeLaAceitunaALaLuna(ronaldo);
                            return;
                        }
                        
                        /*Tener en cuenta que en este entorno no trabajamos
                          sobre clculo simblico, sino en punto flotante.
                          Existe por ello una exigua, pero real, contingencia
                          de obtener errneas soluciones imaginarias cercanas
                          a las correctas, que nos abriran el paso a una nueva
                          dimensin, y con las que podramos, en esta versin,
                          exhibir un comportamiento deshonesto que podra no
                          ser bien visto por los rivales. Conformes al cdigo
                          del perfecto caballero, no vamos a ser inicuos.*/
                        double obnubilar;
                        
                        //Aforismo de Javier Clemente
                        salirDerrapandoY = /*mj[ronaldo].getY()*/ - Math.sqrt
                                ((obnubilar =
                                 -(mj[ronaldo].getX()+salirDerrapandoX) *
                                  (mj[ronaldo].getX()+salirDerrapandoX) -
                                 mj[ronaldo].getX()*mj[ronaldo].getX() +
                                 2*(mj[ronaldo].getX()+salirDerrapandoX) *
                                 mj[ronaldo].getX() + 900) < 0 ? 0 :
                                     obnubilar);
                    }
                    else if(ahoraNegatifvo)
                    {
                        if((int)(--salirDerrapandoX) <= -30)
                            ahoraNegatifvo = false;
                        
                        double ofuscar;
                        
                        //Corolario de Maradona
                        salirDerrapandoY = /*mj[ronaldo].getY()*/ - Math.sqrt
                                ((ofuscar = 
                                 -(mj[ronaldo].getX()+salirDerrapandoX) *
                                  (mj[ronaldo].getX()+salirDerrapandoX) -
                                 mj[ronaldo].getX()*mj[ronaldo].getX() +
                                 2*(mj[ronaldo].getX()+salirDerrapandoX) *
                                 mj[ronaldo].getX() + 900) < 0 ? 0 :
                                     ofuscar);
                    }
                    else
                    {
                        if((int)(++salirDerrapandoX) >= 30)
                            complecionDelToston = true;
                        
                        double tergiversar;
                        
                        //Axioma de Pel
                        salirDerrapandoY = /*mj[ronaldo].getY()*/ + Math.sqrt
                                ((tergiversar =
                                 -(mj[ronaldo].getX()+salirDerrapandoX) *
                                  (mj[ronaldo].getX()+salirDerrapandoX) -
                                 mj[ronaldo].getX()*mj[ronaldo].getX() +
                                 2*(mj[ronaldo].getX()+salirDerrapandoX) *
                                 mj[ronaldo].getX() + 900) < 0 ? 0 :
                                     tergiversar);
                    }
                    
                    toPalanteX = mj[ronaldo].getX() + salirDerrapandoX;
                    toPalanteY = mj[ronaldo].getY() + salirDerrapandoY;
                    
                    toPalanteX = toPalanteX > 160.0? 160.0 :
                        toPalanteX < -160.0 ? -160.0 : toPalanteX;
                    toPalanteY = toPalanteY > 120.0? 120.0 :
                        toPalanteY < -120.0 ? -120.0 : toPalanteY;
                    
                    i = -1;//Magia potagia
                }
            

            comandos.add(new ComandoGolpearBola
                    (ronaldo, toPalanteX, toPalanteY));
        }
    }
    
    private void chuparEstiloRonaldo(int ronaldo)
    {
        if(puedeTirarseUnFarol(ronaldo))
            
        if(mj[ronaldo].distance(160.0, 0.0) < 30.0)
            tiroDeLaAceitunaALaLuna(ronaldo);
        else if(noEstaEnFueraDeJuego(ronaldo, new int [] {8, 9, 10}))
            paseDeCastigo(ronaldo, efectosColaterales);
        
        else //if( && (pasadaDeFrenada = !pasadaDeFrenada))
        {
            double salirDerrapandoX = 160 - mj[ronaldo].x,
                   salirDerrapandoY = -mj[ronaldo].y;
            
            double alfa = Math.sqrt(1024 /
                    (salirDerrapandoX*salirDerrapandoX +
                     salirDerrapandoY*salirDerrapandoY));//Teorema de Zidane
                
            double loQueElVientoSeLLevo = salirDerrapandoX *= alfa;
            double gandalf = salirDerrapandoX, saruman = loQueElVientoSeLLevo,
                   noVayamosAFaenar;
            salirDerrapandoY *= alfa;
            
            double toPalanteX = mj[ronaldo].getX() + salirDerrapandoX,
                   toPalanteY = mj[ronaldo].getY() + salirDerrapandoY;

            
            boolean cantonaaExasperado = toPalanteX > 160.0 ? true :
                    toPalanteX < -160.0 ? true : toPalanteY > 120.0 ? true :
                    toPalanteY < -120.0 ? true : false;
            
            //No tomar rumbo a Brasil
            toPalanteX = toPalanteX > 160.0? 160.0 :
                    toPalanteX < -160.0 ? -160.0 : toPalanteX;
            toPalanteY = toPalanteY > 120.0? 120.0 :
                    toPalanteY < -120.0? -120.0 : toPalanteY;
            
            boolean alternar = mj[ronaldo].y > 0, clamidia = true,
                    ensamblador = true;
            
            
            for(int i = 0; i < contrarios.length; i++)
                if(contrarios[i].distance(toPalanteX, toPalanteY) < 30.0 ||
                    cantonaaExasperado)
                {
                    //Barrer simultneamente los dos arcos complementarios de
                    //Lgolas
                    if(alternar)
                        //Minas Tirith
                    {
                        if(clamidia)
                        {
                            if(++gandalf > 31.0)
                                clamidia = false;
                            
                            //Notar que la primera siempre es en la frente
                            gandalf = gandalf > 32.0 ? gandalf-2 : gandalf;
                            
                            salirDerrapandoY = Math.sqrt
                                    ((noVayamosAFaenar = 1024.0-gandalf*gandalf)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        else
                        {
                            if(--gandalf <= -loQueElVientoSeLLevo)
                                //Si la compaa ha fracasado, entregar el
                                //anillo a Ronaldo para que se vuelva invisible.
                            {
//                                tiroDeLaAceitunaALaLuna(ronaldo);
                                paseFatidico(ronaldo,
                                        getListaCercanos(mj, mj[ronaldo])[1]);
                                return;
                            }
                            salirDerrapandoY = -Math.sqrt
                                    ((noVayamosAFaenar = 1024.0-gandalf*gandalf)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        salirDerrapandoX = gandalf;
                    }
                    else
                        //Minas Morgl
                    {
                        if(ensamblador)
                        {
                            if(--saruman < -31.0)
                                ensamblador = false;
                            salirDerrapandoY = Math.sqrt
                                    ((noVayamosAFaenar = 1024.0-saruman*saruman)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        else
                        {
                            if(++saruman >= -loQueElVientoSeLLevo)
                                //Si la compaa ha fracasado, entregar el
                                //anillo a Ronaldo para que se vuelva invisible.
                            {
//                                tiroDeLaAceitunaALaLuna(ronaldo);
                                paseFatidico(ronaldo,
                                        getListaCercanos(mj, mj[ronaldo])[1]);
                                return;
                            }
                            salirDerrapandoY = -Math.sqrt
                                    ((noVayamosAFaenar = 1024.0-saruman*saruman)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        salirDerrapandoX = saruman;
                    }
                    
                    alternar = !alternar;

                    
                    toPalanteX = mj[ronaldo].getX() + salirDerrapandoX;
                    toPalanteY = mj[ronaldo].getY() + salirDerrapandoY;
                    
                    cantonaaExasperado = toPalanteX > 160.0 ? true :
                        toPalanteX < -160.0 ? true : toPalanteY > 120.0 ? true :
                        toPalanteY < -120.0 ? true : false;
                    
                    toPalanteX = toPalanteX > 160.0? 160.0 :
                        toPalanteX < -160.0 ? -160.0 : toPalanteX;
                    toPalanteY = toPalanteY > 120.0? 120.0 :
                        toPalanteY < -120.0 ? -120.0 : toPalanteY;
                    
                    i = -1;//Magia potagia
                }
            

            comandos.add(new ComandoGolpearBola
                    (ronaldo, toPalanteX, toPalanteY));
        }
    }

    private boolean chuparBanquillo()
    {
        for(int i = 0; i < 11; i++)
            if(nValores[i][2] == 4 && puedeTirarseUnFarol(i))
                return true;
        return false;
    }

    private void queVaAPasarElObus(int manoloEscobar)
    {
        if(puedeTirarseUnFarol(manoloEscobar))
            tiroDeLaAceitunaALaLuna(manoloEscobar);
        else
            for(int i = 0; i < 11; i++)
                if(nValores[i][2] == 4 && puedeTirarseUnFarol(i) &&
                    tripartito(manoloEscobar, i))
                {
                    if(mj[i].x > mj[manoloEscobar].x)
                        comandos.add(new ComandoIrA(manoloEscobar,
                                mj[i].getX(), mj[i].getY()));
                    else
                        comandos.add(new ComandoIrA(manoloEscobar,
                                mj[manoloEscobar].getX(), mj[i].getY()));
                    return;//Al final slo puede quedar uno
                }
    }
    
    private boolean noEstaEnFueraDeJuego(int erGitano, int [] losPayos)
    {
        bucleMuySimilarAlPeinadoDeFrankRaikjard:
        for(int i = 0; i < losPayos.length; i++)
            if(mj[losPayos[i]].x >= 90 &&
                mj[erGitano].distance(mj[losPayos[i]]) < 40)
            {
                for(int j = 0; j < contrarios.length; j++)
                    if(Line2D.ptSegDist
                        (mj[erGitano].getX(), mj[erGitano].getY(),
                         mj[losPayos[i]].getX(), mj[losPayos[i]].getY(),
                         contrarios[j].getX(), contrarios[j].getY()) < 15.0)
                            continue bucleMuySimilarAlPeinadoDeFrankRaikjard;
                
                efectosColaterales = losPayos[i];
                return true;
            }
        return false;
    }

    private boolean tripartito(int omega, int alfa)
    {
        switch(omega)
        {
            case  8: return mj[alfa].y <= -40 ? true : false;
                
            case  9: return mj[alfa].y > -40 && mj[alfa].y < 40 ? true : false;
                
            case 10: return mj[alfa].y >=40 ? true : false;
            
            default: return false;
        }
    }
    
    private void chuparEstiloRonaldoBocadilloColgandoDeHilo(int ronaldo)
    {
        if(puedeTirarseUnFarol(ronaldo))
            
        if(mj[ronaldo].distance(160.0, 0.0) < 30.0)
            tiroDeLaAceitunaALaLuna(ronaldo);
        else if(noEstaEnFueraDeJuego(ronaldo, new int [] {8, 9, 10}))
            paseDeCastigo(ronaldo, efectosColaterales);
        
        else //if( && (pasadaDeFrenada = !pasadaDeFrenada))
        {
            double salirDerrapandoX = 160 - mj[ronaldo].x,
                   salirDerrapandoY = -mj[ronaldo].y;
            
            double alfa = Math.sqrt(1024 /
                    (salirDerrapandoX*salirDerrapandoX +
                     salirDerrapandoY*salirDerrapandoY));//Teorema de Zidane
                
            double loQueElVientoSeLLevo = salirDerrapandoX *= alfa;
            double gandalf = salirDerrapandoX, saruman = loQueElVientoSeLLevo,
                   noVayamosAFaenar;
            salirDerrapandoY *= alfa;
            
            double toPalanteX = mj[ronaldo].getX() + salirDerrapandoX,
                   toPalanteY = mj[ronaldo].getY() + salirDerrapandoY;

            
            boolean cantonaaExasperado = toPalanteX > 160.0 ? true :
                    toPalanteX < -160.0 ? true : toPalanteY > 120.0 ? true :
                    toPalanteY < -120.0 ? true : false;
            
            //No tomar rumbo a Brasil
            toPalanteX = toPalanteX > 160.0? 160.0 :
                    toPalanteX < -160.0 ? -160.0 : toPalanteX;
            toPalanteY = toPalanteY > 120.0? 120.0 :
                    toPalanteY < -120.0 ? -120.0 : toPalanteY;
            
            boolean alternar = mj[ronaldo].y > 0, clamidia = true,
                    ensamblador = true;
            
            
            for(int i = 0; i < contrarios.length; i++)
                if(regresoAlFuturo3[i].distance(toPalanteX, toPalanteY) < 25.0
                    || cantonaaExasperado)
                {
                    //Barrer simultneamente los dos arcos complementarios de
                    //Lgolas
                    if(alternar)
                        //Minas Tirith
                    {
                        if(clamidia)
                        {
                            if(++gandalf > 31.0)
                                clamidia = false;
                            
                            //Notar que la primera siempre es en la frente
                            gandalf = gandalf > 32.0 ? gandalf-2 : gandalf;
                            
                            salirDerrapandoY = Math.sqrt
                                    ((noVayamosAFaenar = 1024.0-gandalf*gandalf)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        else
                        {
                            if(--gandalf <= -loQueElVientoSeLLevo)
                                //Si la compaa ha fracasado, entregar el
                                //anillo a Ronaldo para que se vuelva invisible.
                            {
//                                tiroDeLaAceitunaALaLuna(ronaldo);
                                paseFatidico(ronaldo,
                                        getListaCercanos(mj, mj[ronaldo])[1]);
                                return;
                            }
                            salirDerrapandoY = -Math.sqrt
                                    ((noVayamosAFaenar = 1024.0-gandalf*gandalf)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        salirDerrapandoX = gandalf;
                    }
                    else
                        //Minas Morgl
                    {
                        if(ensamblador)
                        {
                            if(--saruman < -31.0)
                                ensamblador = false;
                            salirDerrapandoY = Math.sqrt
                                    ((noVayamosAFaenar = 1024.0-saruman*saruman)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        else
                        {
                            if(++saruman >= -loQueElVientoSeLLevo)
                                //Si la compaa ha fracasado, entregar el
                                //anillo a Ronaldo para que se vuelva invisible.
                            {
//                                tiroDeLaAceitunaALaLuna(ronaldo);
                                paseFatidico(ronaldo,
                                        getListaCercanos(mj, mj[ronaldo])[1]);
                                return;
                            }
                            salirDerrapandoY = -Math.sqrt
                                    ((noVayamosAFaenar = 1024.0-saruman*saruman)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        salirDerrapandoX = saruman;
                    }
                    
                    alternar = !alternar;

                    
                    toPalanteX = mj[ronaldo].getX() + salirDerrapandoX;
                    toPalanteY = mj[ronaldo].getY() + salirDerrapandoY;
                    
                    cantonaaExasperado = toPalanteX > 160.0 ? true :
                        toPalanteX < -160.0 ? true : toPalanteY > 120.0 ? true :
                        toPalanteY < -120.0 ? true : false;
                    
                    toPalanteX = toPalanteX > 160.0? 160.0 :
                        toPalanteX < -160.0 ? -160.0 : toPalanteX;
                    toPalanteY = toPalanteY > 120.0? 120.0 :
                        toPalanteY < -120.0 ? -120.0 : toPalanteY;
                    
                    i = -1;//Magia potagia
                }
            

            comandos.add(new ComandoGolpearBola
                    (ronaldo, toPalanteX, toPalanteY));
        }
    }
    
    private void chuparEstiloRonaldoEnElBarca(int ronaldo)
    {
        boolean talante = false;
        
        if(puedeTirarseUnFarol(ronaldo))
            
        if(mj[ronaldo].distance(160.0, 0.0) < 30.0)
            tiroDeLaAceitunaALaLuna(ronaldo);
        else if(noEstaEnFueraDeJuego(ronaldo, new int [] {8, 9, 10}))
            paseDeCastigo(ronaldo, efectosColaterales);
        
        else //if( && (pasadaDeFrenada = !pasadaDeFrenada))
        {
            double salirDerrapandoX = 160 - mj[ronaldo].x,
                   salirDerrapandoY = -mj[ronaldo].y;
            
            double alfa = Math.sqrt(1024 /
                    (salirDerrapandoX*salirDerrapandoX +
                     salirDerrapandoY*salirDerrapandoY));//Teorema de Zidane
                
            double loQueElVientoSeLLevo = salirDerrapandoX *= alfa;
            double gandalf = salirDerrapandoX, saruman = loQueElVientoSeLLevo,
                   noVayamosAFaenar;
            salirDerrapandoY *= alfa;
            
            double toPalanteX = mj[ronaldo].getX() + salirDerrapandoX,
                   toPalanteY = mj[ronaldo].getY() + salirDerrapandoY;

            
            boolean cantonaaExasperado = toPalanteX > 160.0 ? true :
                    toPalanteX < -160.0 ? true : toPalanteY > 120.0 ? true :
                    toPalanteY < -120.0 ? true : false;
            
            //No tomar rumbo a Brasil
            toPalanteX = toPalanteX > 160.0? 160.0 :
                    toPalanteX < -160.0 ? -160.0 : toPalanteX;
            toPalanteY = toPalanteY > 120.0? 120.0 :
                    toPalanteY < -120.0 ? -120.0 : toPalanteY;
            
            boolean alternar = mj[ronaldo].y > 0, clamidia = true,
                    ensamblador = true;
            
            
            for(int i = 0; i < contrarios.length; i++)
                if(contrarios[i].distance(toPalanteX, toPalanteY) < 25.0 ||
                    cantonaaExasperado)
                {
                    talante = true;
                    
                    //Barrer simultneamente los dos arcos complementarios de
                    //Lgolas
                    if(alternar)
                        //Minas Tirith
                    {
                        if(clamidia)
                        {
                            if(++gandalf > 31.0)
                                clamidia = false;
                            
                            //Notar que la primera siempre es en la frente
                            gandalf = gandalf > 32.0 ? gandalf-2 : gandalf;
                            
                            salirDerrapandoY = Math.sqrt
                                    ((noVayamosAFaenar = 1024.0-gandalf*gandalf)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        else
                        {
                            if(--gandalf <= -loQueElVientoSeLLevo)
                                //Si la compaa ha fracasado, entregar el
                                //anillo a Ronaldo para que se vuelva invisible.
                            {
//                                tiroDeLaAceitunaALaLuna(ronaldo);
                                paseFatidico(ronaldo,
                                        getListaCercanos(mj, mj[ronaldo])[1]);
                                return;
                            }
                            salirDerrapandoY = -Math.sqrt
                                    ((noVayamosAFaenar = 1024.0-gandalf*gandalf)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        salirDerrapandoX = gandalf;
                    }
                    else
                        //Minas Morgl
                    {
                        if(ensamblador)
                        {
                            if(--saruman < -31.0)
                                ensamblador = false;
                            salirDerrapandoY = Math.sqrt
                                    ((noVayamosAFaenar = 1024.0-saruman*saruman)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        else
                        {
                            if(++saruman >= -loQueElVientoSeLLevo)
                                //Si la compaa ha fracasado, entregar el
                                //anillo a Ronaldo para que se vuelva invisible.
                            {
//                                tiroDeLaAceitunaALaLuna(ronaldo);
                                paseFatidico(ronaldo,
                                        getListaCercanos(mj, mj[ronaldo])[1]);
                                return;
                            }
                            salirDerrapandoY = -Math.sqrt
                                    ((noVayamosAFaenar = 1024.0-saruman*saruman)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        salirDerrapandoX = saruman;
                    }
                    
                    alternar = !alternar;

                    
                    toPalanteX = mj[ronaldo].getX() + salirDerrapandoX;
                    toPalanteY = mj[ronaldo].getY() + salirDerrapandoY;
                    
                    cantonaaExasperado = toPalanteX > 160.0 ? true :
                        toPalanteX < -160.0 ? true : toPalanteY > 120.0 ? true :
                        toPalanteY < -120.0 ? true : false;
                    
                    toPalanteX = toPalanteX > 160.0? 160.0 :
                        toPalanteX < -160.0 ? -160.0 : toPalanteX;
                    toPalanteY = toPalanteY > 120.0? 120.0 :
                        toPalanteY < -120.0 ? -120.0 : toPalanteY;
                    
                    i = -1;//Magia potagia
                }
            
            if(talante)
            {
                //Barrer simultneamente los dos arcos complementarios de
                //Lgolas
                if(alternar)
                    //Minas Tirith
                {
                    if(clamidia)
                    {
                        gandalf += 6;
                        if(gandalf > 31.0)
                            gandalf = 62 - gandalf;
                        
                        salirDerrapandoY = Math.sqrt
                                ((noVayamosAFaenar = 1024.0-gandalf*gandalf)
                                < 0.0 ? 0.0 : noVayamosAFaenar);
                    }
                    else
                    {
                        if((gandalf -= 6) <= -loQueElVientoSeLLevo)
                            //Si la compaa ha fracasado, entregar el
                            //anillo a Ronaldo para que se vuelva invisible.
                        {
//                                tiroDeLaAceitunaALaLuna(ronaldo);
                            paseFatidico(ronaldo,
                                    getListaCercanos(mj, mj[ronaldo])[1]);
                            return;
                        }
                        salirDerrapandoY = -Math.sqrt
                                ((noVayamosAFaenar = 1024.0-gandalf*gandalf)
                                < 0.0 ? 0.0 : noVayamosAFaenar);
                    }
                    salirDerrapandoX = gandalf;
                }
                else
                    //Minas Morgl
                {
                    if(ensamblador)
                    {
                        saruman -= 6;
                        if(saruman < -31.0)
                            saruman = -62 - saruman;
                        salirDerrapandoY = Math.sqrt
                                ((noVayamosAFaenar = 1024.0-saruman*saruman)
                                < 0.0 ? 0.0 : noVayamosAFaenar);
                    }
                    else
                    {
                        if((saruman += 6) >= -loQueElVientoSeLLevo)
                            //Si la compaa ha fracasado, entregar el
                            //anillo a Ronaldo para que se vuelva invisible.
                        {
//                                tiroDeLaAceitunaALaLuna(ronaldo);
                            paseFatidico(ronaldo,
                                    getListaCercanos(mj, mj[ronaldo])[1]);
                            return;
                        }
                        salirDerrapandoY = -Math.sqrt
                                ((noVayamosAFaenar = 1024.0-saruman*saruman)
                                < 0.0 ? 0.0 : noVayamosAFaenar);
                    }
                    salirDerrapandoX = saruman;
                }
                
                alternar = !alternar;
                
                
                toPalanteX = mj[ronaldo].getX() + salirDerrapandoX;
                toPalanteY = mj[ronaldo].getY() + salirDerrapandoY;
                
                cantonaaExasperado = toPalanteX > 160.0 ? true :
                    toPalanteX < -160.0 ? true : toPalanteY > 120.0 ? true :
                        toPalanteY < -120.0 ? true : false;
                
                toPalanteX = toPalanteX > 160.0? 160.0 :
                    toPalanteX < -160.0 ? -160.0 : toPalanteX;
                toPalanteY = toPalanteY > 120.0? 120.0 :
                    toPalanteY < -120.0 ? -120.0 : toPalanteY;
            }
            

            comandos.add(new ComandoGolpearBola
                    (ronaldo, toPalanteX, toPalanteY));
        }
    }
    
    private void chuparComoRobotRonaldo(int ronaldo)
    {
        if(puedeTirarseUnFarol(ronaldo))
            
        if(mj[ronaldo].distance(160.0, 0.0) < 30.0)
            tiroDeLaAceitunaALaLuna(ronaldo);
        else if(noEstaEnFueraDeJuego(ronaldo, new int [] {8, 9, 10}))
            paseDeCastigo(ronaldo, efectosColaterales);
        
        else
        {
            double salirDerrapandoX = 160 - mj[ronaldo].x,
                   salirDerrapandoY = -mj[ronaldo].y;
            
            double alfa = Math.sqrt(1024 /
                    (salirDerrapandoX*salirDerrapandoX +
                     salirDerrapandoY*salirDerrapandoY));//Teorema de Zidane
                
            salirDerrapandoX *= alfa;
            salirDerrapandoY *= alfa;
            
            double toPalanteX = mj[ronaldo].getX() + salirDerrapandoX,
                   toPalanteY = mj[ronaldo].getY() + salirDerrapandoY;

            
            boolean cantonaaExasperado = toPalanteX > 160.0 ? true :
                    toPalanteX < -160.0 ? true : toPalanteY > 120.0 ? true :
                    toPalanteY < -120.0 ? true : false;
            
            //No tomar rumbo a Brasil
            toPalanteX = toPalanteX > 160.0? 160.0 :
                    toPalanteX < -160.0 ? -160.0 : toPalanteX;
            toPalanteY = toPalanteY > 120.0? 120.0 :
                    toPalanteY < -120.0 ? -120.0 : toPalanteY;
            
            byte rosaDeLosVientos = 0;
            
            
            for(int i = 0; i < contrarios.length; i++)
                if(contrarios[i].distance(toPalanteX, toPalanteY) < 30.0 ||
                    cantonaaExasperado)
                {
                    switch(rosaDeLosVientos)
                    {
                        case 0:
                        {
                            salirDerrapandoX = 0;
                            salirDerrapandoY = mj[ronaldo].y <= 0 ? 30 : -30;
                            break;
                        }
                        
                        case 1:
                        {
                            salirDerrapandoX = 0;
                            salirDerrapandoY = mj[ronaldo].y <= 0 ? -30 : 30;
                            break;
                        }
                        
                        case 2:
                        {
                            salirDerrapandoX = 30;
                            salirDerrapandoY = 0;
                            break;
                        }
                        
                        case 3:
                        {
                            salirDerrapandoX = -30;
                            salirDerrapandoY = 0;
                            break;
                        }
                        
                        default:
                        {
                            paseFatidico(ronaldo,
                                    getListaCercanos(mj, mj[ronaldo])[1]);
                            return;
                        }
                    }
                    rosaDeLosVientos++;
                    
                    toPalanteX = mj[ronaldo].getX() + salirDerrapandoX;
                    toPalanteY = mj[ronaldo].getY() + salirDerrapandoY;
                    
                    cantonaaExasperado = toPalanteX > 160.0 ? true :
                        toPalanteX < -160.0 ? true : toPalanteY > 120.0 ? true :
                        toPalanteY < -120.0 ? true : false;
                    
                    toPalanteX = toPalanteX > 160.0? 160.0 :
                        toPalanteX < -160.0 ? -160.0 : toPalanteX;
                    toPalanteY = toPalanteY > 120.0? 120.0 :
                        toPalanteY < -120.0 ? -120.0 : toPalanteY;
                    
                    i = -1;//Magia potagia
                }
            

            comandos.add(new ComandoGolpearBola
                    (ronaldo, toPalanteX, toPalanteY));
        }
    }
    
    private void aparicionesMarianasAZidaneEpisodio1(int ronaldo)
    {
        if(puedeTirarseUnFarol(ronaldo))
            
        if(mj[ronaldo].distance(160.0, 0.0) < 30.0)
            tiroDeLaAceitunaALaLuna(ronaldo);
        else if(noEstaEnFueraDeJuego(ronaldo, new int [] {8, 9, 10}))
            paseDeCastigo(ronaldo, efectosColaterales);
        
        else
        {
            double salirDerrapandoX = 160 - mj[ronaldo].x,
                   salirDerrapandoY = -mj[ronaldo].y;
            
            double alfa = Math.sqrt(1024 /
                    (salirDerrapandoX*salirDerrapandoX +
                     salirDerrapandoY*salirDerrapandoY));//Teorema de Zidane
                
            double loQueElVientoSeLLevo = salirDerrapandoX *= alfa;
            double gandalf = salirDerrapandoX, saruman = loQueElVientoSeLLevo,
                   noVayamosAFaenar;
            salirDerrapandoY *= alfa;
            
            double toPalanteX = bola.getX() + salirDerrapandoX,
                   toPalanteY = bola.getY() + salirDerrapandoY;

            
            boolean cantonaaExasperado = toPalanteX > 160.0 ? true :
                    toPalanteX < -160.0 ? true : toPalanteY > 120.0 ? true :
                    toPalanteY < -120.0 ? true : false;
            
            //No tomar rumbo a Brasil
            toPalanteX = toPalanteX > 160.0? 160.0 :
                    toPalanteX < -160.0 ? -160.0 : toPalanteX;
            toPalanteY = toPalanteY > 120.0? 120.0 :
                    toPalanteY < -120.0 ? -120.0 : toPalanteY;
            
            boolean alternar = mj[ronaldo].y > 0, clamidia = true,
                    ensamblador = true;
            
            
            for(int i = 0; i < contrarios.length; i++)
                if(contrarios[i].distance(toPalanteX, toPalanteY) < 30.0 ||
                    cantonaaExasperado)
                {
                    //Barrer simultneamente los dos arcos complementarios de
                    //Lgolas
                    if(alternar)
                        //Minas Tirith
                    {
                        if(clamidia)
                        {
                            if(++gandalf > 31.0)
                                clamidia = false;
                            
                            //Notar que la primera siempre es en la frente
                            gandalf = gandalf > 32.0 ? gandalf-2 : gandalf;
                            
                            salirDerrapandoY = Math.sqrt
                                    ((noVayamosAFaenar = 1024.0-gandalf*gandalf)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        else
                        {
                            if(--gandalf <= -loQueElVientoSeLLevo)
                                //Si la compaa ha fracasado, entregar el
                                //anillo a Ronaldo para que se vuelva invisible.
                            {
                                paseFatidico(ronaldo,
                                        getListaCercanos(mj, mj[ronaldo])[1]);
                                return;
                            }
                            salirDerrapandoY = -Math.sqrt
                                    ((noVayamosAFaenar = 1024.0-gandalf*gandalf)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        salirDerrapandoX = gandalf;
                    }
                    else
                        //Minas Morgl
                    {
                        if(ensamblador)
                        {
                            if(--saruman < -31.0)
                                ensamblador = false;
                            salirDerrapandoY = Math.sqrt
                                    ((noVayamosAFaenar = 1024.0-saruman*saruman)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        else
                        {
                            if(++saruman >= -loQueElVientoSeLLevo)
                                //Si la compaa ha fracasado, entregar el
                                //anillo a Ronaldo para que se vuelva invisible.
                            {
                                paseFatidico(ronaldo,
                                        getListaCercanos(mj, mj[ronaldo])[1]);
                                return;
                            }
                            salirDerrapandoY = -Math.sqrt
                                    ((noVayamosAFaenar = 1024.0-saruman*saruman)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        salirDerrapandoX = saruman;
                    }
                    
                    alternar = !alternar;

                    
                    toPalanteX = bola.getX() + salirDerrapandoX;
                    toPalanteY = bola.getY() + salirDerrapandoY;
                    
                    cantonaaExasperado = toPalanteX > 160.0 ? true :
                        toPalanteX < -160.0 ? true : toPalanteY > 120.0 ? true :
                        toPalanteY < -120.0 ? true : false;
                    
                    toPalanteX = toPalanteX > 160.0? 160.0 :
                        toPalanteX < -160.0 ? -160.0 : toPalanteX;
                    toPalanteY = toPalanteY > 120.0? 120.0 :
                        toPalanteY < -120.0 ? -120.0 : toPalanteY;
                    
                    i = -1;//Magia potagia
                }
            

            comandos.add(new ComandoGolpearBola
                    (ronaldo, toPalanteX, toPalanteY));
        }
    }
    
    private void aparicionesMarianasAZidaneEpisodio2(int ronaldo)
    {
        if(puedeTirarseUnFarol(ronaldo))
            
        if(mj[ronaldo].distance(160.0, 0.0) < 30.0)
            tiroDeLaAceitunaALaLuna(ronaldo);
        else if(noEstaEnFueraDeJuego(ronaldo, new int [] {8, 9, 10}))
            paseDeCastigo(ronaldo, efectosColaterales);
        
        else
        {
            double salirDerrapandoX = 160 - mj[ronaldo].x,
                   salirDerrapandoY = -mj[ronaldo].y;
            
            double alfa = Math.sqrt(1024.0 /
                    (salirDerrapandoX*salirDerrapandoX +
                     salirDerrapandoY*salirDerrapandoY));//Teorema de Zidane
                
            double loQueElVientoSeLLevo = salirDerrapandoX *= alfa;
            double gandalf = salirDerrapandoX, saruman = loQueElVientoSeLLevo,
                   noVayamosAFaenar;
            salirDerrapandoY *= alfa;
            
            double toPalanteX = bola.getX() + salirDerrapandoX,
                   toPalanteY = bola.getY() + salirDerrapandoY;

            
            boolean cantonaaExasperado = toPalanteX > 160.0 ? true :
                    toPalanteX < -160.0 ? true : toPalanteY > 120.0 ? true :
                    toPalanteY < -120.0 ? true : false;
            
            //No tomar rumbo a Brasil
            toPalanteX = toPalanteX > 160.0? 160.0 :
                    toPalanteX < -160.0 ? -160.0 : toPalanteX;
            toPalanteY = toPalanteY > 120.0? 120.0 :
                    toPalanteY < -120.0 ? -120.0 : toPalanteY;
            
            boolean alternar = mj[ronaldo].y > 0, clamidia = true,
                    ensamblador = true;
            
            
            for(int i = 0; i < contrarios.length; i++)
                if(contrarios[i].distance(toPalanteX, toPalanteY) < 20.0 ||
                    cantonaaExasperado)
                {
                    //Barrer simultneamente los dos arcos complementarios de
                    //Lgolas
                    if(alternar)
                        //Minas Tirith
                    {
                        if(clamidia)
                        {
                            if(++gandalf > 31.0)
                                clamidia = false;
                            
                            //Notar que la primera siempre es en la frente
                            gandalf = gandalf > 32.0 ? gandalf-2 : gandalf;
                            
                            salirDerrapandoY = Math.sqrt
                                    ((noVayamosAFaenar = 1024.0-gandalf*gandalf)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        else
                        {
                            if(--gandalf <= -loQueElVientoSeLLevo)
                                //Si la compaa ha fracasado, entregar el
                                //anillo a Ronaldo para que se vuelva invisible.
                            {
                                paseFatidico(ronaldo,
                                        getListaCercanos(mj, mj[ronaldo])[1]);
                                return;
                            }
                            salirDerrapandoY = -Math.sqrt
                                    ((noVayamosAFaenar = 1024.0-gandalf*gandalf)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        salirDerrapandoX = gandalf;
                    }
                    else
                        //Minas Morgl
                    {
                        if(ensamblador)
                        {
                            if(--saruman < -31.0)
                                ensamblador = false;
                            salirDerrapandoY = Math.sqrt
                                    ((noVayamosAFaenar = 1024.0-saruman*saruman)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        else
                        {
                            if(++saruman >= -loQueElVientoSeLLevo)
                                //Si la compaa ha fracasado, entregar el
                                //anillo a Ronaldo para que se vuelva invisible.
                            {
                                paseFatidico(ronaldo,
                                        getListaCercanos(mj, mj[ronaldo])[1]);
                                return;
                            }
                            salirDerrapandoY = -Math.sqrt
                                    ((noVayamosAFaenar = 1024.0-saruman*saruman)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        salirDerrapandoX = saruman;
                    }
                    
                    alternar = !alternar;

                    
                    toPalanteX = bola.getX() + salirDerrapandoX;
                    toPalanteY = bola.getY() + salirDerrapandoY;
                    
                    cantonaaExasperado = toPalanteX > 160.0 ? true :
                        toPalanteX < -160.0 ? true : toPalanteY > 120.0 ? true :
                        toPalanteY < -120.0 ? true : false;
                    
                    toPalanteX = toPalanteX > 160.0? 160.0 :
                        toPalanteX < -160.0 ? -160.0 : toPalanteX;
                    toPalanteY = toPalanteY > 120.0? 120.0 :
                        toPalanteY < -120.0 ? -120.0 : toPalanteY;
                    
                    i = -1;//Magia potagia
                }
            

            comandos.add(new ComandoGolpearBola
                    (ronaldo, toPalanteX, toPalanteY));
        }
    }
    
    private void aparicionesMarianasAZidaneEpisodio3(int ronaldo)
    {
        if(puedeTirarseUnFarol(ronaldo))
            
        if(mj[ronaldo].distance(160.0, 0.0) < 30.0)
            tiroDeLaAceitunaALaLuna(ronaldo);
        else if(arbitroDejaSeguirLaJugada(ronaldo, new int [] {8, 9, 10}))
            paseQuePareceUnaCoz(ronaldo, efectosColateralesMasLaterales);
        
        else
        {
            double salirDerrapandoX = 160 - mj[ronaldo].x,
                   salirDerrapandoY = -mj[ronaldo].y;
            
            double alfa = Math.sqrt(1024.0 /
                    (salirDerrapandoX*salirDerrapandoX +
                     salirDerrapandoY*salirDerrapandoY));//Teorema de Zidane
                
            double loQueElVientoSeLLevo = salirDerrapandoX *= alfa;
            double gandalf = salirDerrapandoX, saruman = loQueElVientoSeLLevo,
                   noVayamosAFaenar;
            salirDerrapandoY *= alfa;
            
            double toPalanteX = bola.getX() + salirDerrapandoX,
                   toPalanteY = bola.getY() + salirDerrapandoY;

            
            boolean cantonaaExasperado = toPalanteX > 160.0 ? true :
                    toPalanteX < -160.0 ? true : toPalanteY > 120.0 ? true :
                    toPalanteY < -120.0 ? true : false;
            
            //No tomar rumbo a Brasil
            toPalanteX = toPalanteX > 160.0? 160.0 :
                    toPalanteX < -160.0 ? -160.0 : toPalanteX;
            toPalanteY = toPalanteY > 120.0? 120.0 :
                    toPalanteY < -120.0 ? -120.0 : toPalanteY;
            
            boolean alternar = mj[ronaldo].y > 0, clamidia = true,
                    ensamblador = true;
            
            
            for(int i = 0; i < contrarios.length; i++)
                if(contrarios[i].distance(toPalanteX, toPalanteY) < 30.0 ||
                    cantonaaExasperado)
                {
                    //Barrer simultneamente los dos arcos complementarios de
                    //Lgolas
                    if(alternar)
                        //Minas Tirith
                    {
                        if(clamidia)
                        {
                            if(++gandalf > 31.0)
                                clamidia = false;
                            
                            //Notar que la primera siempre es en la frente
                            gandalf = gandalf > 32.0 ? gandalf-2 : gandalf;
                            
                            salirDerrapandoY = Math.sqrt
                                    ((noVayamosAFaenar = 1024.0-gandalf*gandalf)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        else
                        {
                            if(--gandalf <= -loQueElVientoSeLLevo)
                                //Si la compaa ha fracasado, entregar el
                                //anillo a Ronaldo para que se vuelva invisible.
                            {
                                paseFatidico(ronaldo,
                                        getListaCercanos(mj, mj[ronaldo])[1]);
                                return;
                            }
                            salirDerrapandoY = -Math.sqrt
                                    ((noVayamosAFaenar = 1024.0-gandalf*gandalf)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        salirDerrapandoX = gandalf;
                    }
                    else
                        //Minas Morgl
                    {
                        if(ensamblador)
                        {
                            if(--saruman < -31.0)
                                ensamblador = false;
                            salirDerrapandoY = Math.sqrt
                                    ((noVayamosAFaenar = 1024.0-saruman*saruman)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        else
                        {
                            if(++saruman >= -loQueElVientoSeLLevo)
                                //Si la compaa ha fracasado, entregar el
                                //anillo a Ronaldo para que se vuelva invisible.
                            {
                                paseFatidico(ronaldo,
                                        getListaCercanos(mj, mj[ronaldo])[1]);
                                return;
                            }
                            salirDerrapandoY = -Math.sqrt
                                    ((noVayamosAFaenar = 1024.0-saruman*saruman)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        salirDerrapandoX = saruman;
                    }
                    
                    alternar = !alternar;

                    
                    toPalanteX = bola.getX() + salirDerrapandoX;
                    toPalanteY = bola.getY() + salirDerrapandoY;
                    
                    cantonaaExasperado = toPalanteX > 160.0 ? true :
                        toPalanteX < -160.0 ? true : toPalanteY > 120.0 ? true :
                        toPalanteY < -120.0 ? true : false;
                    
                    toPalanteX = toPalanteX > 160.0? 160.0 :
                        toPalanteX < -160.0 ? -160.0 : toPalanteX;
                    toPalanteY = toPalanteY > 120.0? 120.0 :
                        toPalanteY < -120.0 ? -120.0 : toPalanteY;
                    
                    i = -1;//Magia potagia
                }
            

            comandos.add(new ComandoGolpearBola
                    (ronaldo, toPalanteX, toPalanteY));
        }
    }

    private int analizarSituacionConLaCabezaEnBlanco(int cabezon)
    {
        int [] insignias = new int [11];
//        int a = nValores[cabezon][2] == 4 ? 20 : nValores[cabezon][2] == 5 ? 
//            30 : nValores[cabezon][2] == 6 ? 40 : 50,
//                b = nValores[cabezon][2] == 4 ? 50 : nValores[cabezon][2] == 5 ?
//                    90 : nValores[cabezon][2] == 6 ? 160 : 220;
        
        int a, b, alfa, gamma = 18225, acelerarCalculos,
                todosConLaSeleccion = 10, beta = gamma/40,
                laSeleccionConTodos = Integer.MIN_VALUE;
        
        switch(nValores[cabezon][2])
        {
            case 4:
            {
                a = 20;
                b = 50;
                break;
            }
            
            case 5:
            {
                a = 30;
                b = 90;
                break;
            }
            
            case 6:
            {
                a = 40;
                b = 160;
                break;
            }
            
            default:
            {
                a = 50;
                b = 220;
            }
        }
        
        alfa = (a+b)/2;
        
        for(int i = 1; i < mj.length; i++)
            if(i != cabezon)
            {
                if(laSeleccionConTodos <
                        (insignias[i] += -(acelerarCalculos =
                            (int) (mj[cabezon].distance(mj[i]) - alfa)) *
                            acelerarCalculos + gamma +
                        dJugadores[i][moscardon[i]] * beta))
                {
                    laSeleccionConTodos = insignias[i];
                    todosConLaSeleccion = i;
                }
            }
                
                
        return todosConLaSeleccion;
    }
    
    private int analizarSituacionConLaCabezaEnNegro(int cabezon)
    {
        int [] insignias = new int [11];
//        int a = nValores[cabezon][2] == 4 ? 20 : nValores[cabezon][2] == 5 ? 
//            30 : nValores[cabezon][2] == 6 ? 40 : 50,
//                b = nValores[cabezon][2] == 4 ? 50 : nValores[cabezon][2] == 5 ?
//                    90 : nValores[cabezon][2] == 6 ? 160 : 220;
        
        int a, b, alfa, gamma = 18225, acelerarCalculos,
                todosConLaSeleccion = 10, beta = gamma/40,
                laSeleccionConTodos = Integer.MIN_VALUE;
        
        switch(nValores[cabezon][2])
        {
            case 4:
            {
                a = 20;
                b = 50;
                break;
            }
            
            case 5:
            {
                a = 30;
                b = 90;
                break;
            }
            
            case 6:
            {
                a = 40;
                b = 160;
                break;
            }
            
            default:
            {
                a = 50;
                b = 220;
            }
        }
        
        alfa = (a+b)/2;
        
        for(int i = 1; i < mj.length; i++)
            if(i != cabezon)
            {
                if(laSeleccionConTodos <
                        (insignias[i] += -(acelerarCalculos =
                            (int) (mj[cabezon].distance(mj[i]) - alfa)) *
                            acelerarCalculos + gamma +
                        dViaLibre[i] * beta))
                {
                    laSeleccionConTodos = insignias[i];
                    todosConLaSeleccion = i;
                }
            }
                
                
        return todosConLaSeleccion;
    }
    
    private boolean arbitroDejaSeguirLaJugada(int erGitano, int [] losPayos)
    {
        int laCosaNostra = contrarios[1].x, elFamiliar = 1;
        
        /* Este lazo supone que el portero es contrarios[0]. Alguna persona tal
         * que fuese hijo de sus padres podra ordenar sus jugadores de otro
         * modo, con lo que este algoritmo no funcionara del todo bien.
         * Sin embargo, de nuevo suponiendo, que esto suceder en pocas
         * ocasiones, y que las consecuencias no sern fatales, lo vamos a dejar
         * as, ya que una alternativa, as, a bote pronto, requiere ms tiempo
         * de proceso.
         */
        for(int i = 2; i < contrarios.length; i++)
            if(contrarios[i].x > laCosaNostra)
            {
                laCosaNostra = contrarios[i].x;
                elFamiliar = i;
            }
            
        bucleQueTiraDeEspaldasAlMismisimoMaestroAstilla:
        for(int i = 0; i < losPayos.length; i++)
            if(mj[losPayos[i]].x >= 90 &&
                mj[erGitano].distance(mj[losPayos[i]]) < 50.0)
            {
                for(int j = 0; j < contrarios.length; j++)
                    if(Line2D.ptSegDist
                        (bola.getX(), bola.getY(),
                         mj[losPayos[i]].getX() +
                        (160-mj[losPayos[i]].x) / 2.5, mj[losPayos[i]].getY(),
                         contrarios[j].getX(), contrarios[j].getY()) < 15.0  ||
                       !(bola.x >= (mj[losPayos[i]].x-5) &&
                         bola.x > laCosaNostra) )
                            continue
                        bucleQueTiraDeEspaldasAlMismisimoMaestroAstilla;
                
                efectosColateralesMasLaterales = losPayos[i];
                return true;
            }
        return false;
    }
    
    private void paseQuePareceUnaCoz(int yo, int aTi)
    {
        //Mientras el portero no suba a rematar no tontear con l
        if(aTi == 0) return;
        
        if(puedeTirarseUnFarol(yo))
        {
            double puntoFatidicoX = mj[aTi].getX() + (160-mj[aTi].x) / 2.5,
                    puntoFatidicoY = mj[aTi].getY();
            
            double bozal = (mj[aTi].getY()-mj[yo].getY())/1.5;
            
            comandos.add(new ComandoGolpearBola
                    (yo, puntoFatidicoX, puntoFatidicoY + bozal > 20.0 ? 20.0 :
                                         bozal < -20.0 ? -20.0 : bozal));
            
            
            puntoFatidicoX = puntoFatidicoX > 160.0? 160.0 : puntoFatidicoX;
            puntoFatidicoY = puntoFatidicoY > 120.0? 120.0 :
                puntoFatidicoY < -120? -120 : puntoFatidicoY;
            
            estamosTramandoAlgo[aTi] = true;
            comandos.add( loQueTramamos[aTi] = new ComandoIrA
                    (aTi, puntoFatidicoX, puntoFatidicoY));
            escenarioDeLaTrama[aTi] =
                    new Point((int) puntoFatidicoX, (int) puntoFatidicoY);
            acariciarElBalon[aTi] = mj[aTi].distance(bola);
        }
        
    }
    
    private void aparicionesMarianasAZidaneEpisodio4(int ronaldo)
    {
        if(puedeTirarseUnFarol(ronaldo))
            
        if(Line2D.ptSegDist(160.0, -30.0, 160.0, 30.0,
                mj[ronaldo].getX(), mj[ronaldo].getY()) < 30.0)
//                (mj[ronaldo].distance(160.0, 0.0) < 30.0)
            tiroDeLaAceitunaALaLuna(ronaldo);
        else if(arbitroDejaSeguirLaJugada(ronaldo, new int [] {8, 9, 10}))
            paseQuePareceUnaCoz(ronaldo, efectosColateralesMasLaterales);
        
        else if(dJugadores[ronaldo][moscardon[ronaldo]] < 10.0 &&
                mj[ronaldo].x < contrarios[moscardon[ronaldo]].x+5)
        {
            double teletransporteX = 160.0 - mj[ronaldo].x,
                   teletransporteY = mj[ronaldo].y <
                    contrarios[moscardon[ronaldo]].y ? -120.0 : 120.0;
            
            double alfa = Math.sqrt(1024.0 /
                    (teletransporteX*teletransporteX +
                     teletransporteY*teletransporteY));//Teorema de Zidane
                
            teletransporteX *= alfa;
            teletransporteY *= alfa;
            
            double telequinesiaX = bola.getX() + teletransporteX,
                   telequinesiaY = bola.getY() + teletransporteY;

            comandos.add(new ComandoGolpearBola
                    (ronaldo, telequinesiaX, telequinesiaY));
        }
        else
        {
            double salirDerrapandoX = 160.0 - mj[ronaldo].x,
                   salirDerrapandoY = -mj[ronaldo].y;
            
            double alfa = Math.sqrt(1024.0 /
                    (salirDerrapandoX*salirDerrapandoX +
                     salirDerrapandoY*salirDerrapandoY));//Teorema de Zidane
                
            double loQueElVientoSeLLevo = salirDerrapandoX *= alfa;
            double gandalf = salirDerrapandoX, saruman = loQueElVientoSeLLevo,
                   noVayamosAFaenar;
            salirDerrapandoY *= alfa;
            
            double toPalanteX = bola.getX() + salirDerrapandoX,
                   toPalanteY = bola.getY() + salirDerrapandoY;

            
            boolean cantonaaExasperado = toPalanteX > 160.0 ? true :
                    toPalanteX < -160.0 ? true : toPalanteY > 120.0 ? true :
                    toPalanteY < -120.0 ? true : false;
            
            //No tomar rumbo a Brasil
            toPalanteX = toPalanteX > 160.0? 160.0 :
                    toPalanteX < -160.0 ? -160.0 : toPalanteX;
            toPalanteY = toPalanteY > 120.0? 120.0 :
                    toPalanteY < -120.0 ? -120.0 : toPalanteY;
            
            boolean alternar = mj[ronaldo].y > 0, clamidia = true,
                    ensamblador = true;
            
            
            for(int i = 0; i < contrarios.length; i++)
                if(contrarios[i].distance(toPalanteX, toPalanteY) < 30.0 ||
                    cantonaaExasperado)
                {
                    //Barrer simultneamente los dos arcos complementarios de
                    //Lgolas
                    if(alternar)
                        //Minas Tirith
                    {
                        if(clamidia)
                        {
                            if(++gandalf > 31.0)
                                clamidia = false;
                            
                            //Notar que la primera siempre es en la frente
                            gandalf = gandalf > 32.0 ? gandalf-2 : gandalf;
                            
                            salirDerrapandoY = Math.sqrt
                                    ((noVayamosAFaenar = 1024.0-gandalf*gandalf)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        else
                        {
                            if(--gandalf <= -loQueElVientoSeLLevo)
                                //Si la compaa ha fracasado, entregar el
                                //anillo a Ronaldo para que se vuelva invisible.
                            {
                                paseFatidico(ronaldo,
                                        getListaCercanos(mj, mj[ronaldo])[1]);
                                return;
                            }
                            salirDerrapandoY = -Math.sqrt
                                    ((noVayamosAFaenar = 1024.0-gandalf*gandalf)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        salirDerrapandoX = gandalf;
                    }
                    else
                        //Minas Morgl
                    {
                        if(ensamblador)
                        {
                            if(--saruman < -31.0)
                                ensamblador = false;
                            salirDerrapandoY = Math.sqrt
                                    ((noVayamosAFaenar = 1024.0-saruman*saruman)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        else
                        {
                            if(++saruman >= -loQueElVientoSeLLevo)
                                //Si la compaa ha fracasado, entregar el
                                //anillo a Ronaldo para que se vuelva invisible.
                            {
                                paseFatidico(ronaldo,
                                        getListaCercanos(mj, mj[ronaldo])[1]);
                                return;
                            }
                            salirDerrapandoY = -Math.sqrt
                                    ((noVayamosAFaenar = 1024.0-saruman*saruman)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        salirDerrapandoX = saruman;
                    }
                    
                    alternar = !alternar;

                    
                    toPalanteX = bola.getX() + salirDerrapandoX;
                    toPalanteY = bola.getY() + salirDerrapandoY;
                    
                    cantonaaExasperado = toPalanteX > 160.0 ? true :
                        toPalanteX < -160.0 ? true : toPalanteY > 120.0 ? true :
                        toPalanteY < -120.0 ? true : false;
                    
                    toPalanteX = toPalanteX > 160.0? 160.0 :
                        toPalanteX < -160.0 ? -160.0 : toPalanteX;
                    toPalanteY = toPalanteY > 120.0? 120.0 :
                        toPalanteY < -120.0 ? -120.0 : toPalanteY;
                    
                    i = -1;//Magia potagia
                }
            

            comandos.add(new ComandoGolpearBola
                    (ronaldo, toPalanteX, toPalanteY));
        }
    }
    
    private boolean linierNoLevantaElBanderin(int erGitano, int [] losPayos)
    {
        int laCosaNostra = contrarios[1].x, elFamiliar = 1;
        
        /* Este lazo supone que el portero es contrarios[0]. Alguna persona tal
         * que fuese hijo de sus padres podra ordenar sus jugadores de otro
         * modo, con lo que este algoritmo no funcionara del todo bien.
         * Sin embargo, de nuevo suponiendo, que esto suceder en pocas
         * ocasiones, y que las consecuencias no sern fatales, lo vamos a dejar
         * as, ya que una alternativa, as, a bote pronto, requiere ms tiempo
         * de proceso.
         */
        for(int i = 2; i < contrarios.length; i++)
            if(contrarios[i].x > laCosaNostra)
            {
                laCosaNostra = contrarios[i].x;
                elFamiliar = i;
            }
            
        bucleEternamenteInfinitoHastaElDiaDelJuicioFinalPeroDeOrdenLogN:
        for(int i = 0; i < losPayos.length; i++)
            if(mj[losPayos[i]].x >= 90 &&
                mj[erGitano].distance(mj[losPayos[i]]) < 50.0)
            {
                for(int j = 0; j < contrarios.length; j++)
                    if(Line2D.ptSegDist
                        (bola.getX(), bola.getY(),
                         mj[losPayos[i]].getX() + 5.0, mj[losPayos[i]].getY(),
                         contrarios[j].getX(), contrarios[j].getY()) < 15.0  ||
                       !(bola.x >= (mj[losPayos[i]].x-5) &&
                         bola.x > laCosaNostra) )
                            continue
                bucleEternamenteInfinitoHastaElDiaDelJuicioFinalPeroDeOrdenLogN;
                
                efectosColateralesMasLaterales = losPayos[i];
                return true;
            }
        return false;
    }
    
    private void paseAlPie(int yo, int aTi)
    {
        //Mientras el portero no suba a rematar no tontear con l
        if(aTi == 0) return;
        
        if(puedeTirarseUnFarol(yo))
        {
            double puntoFatidicoX = mj[aTi].getX() + 5.0,
                    puntoFatidicoY = mj[aTi].getY();
            
            
            comandos.add(new ComandoGolpearBola
                    (yo, puntoFatidicoX-2.5, puntoFatidicoY +
                     mj[yo].y < mj[aTi].y ? 5.0 : -5.0));
            
            
            puntoFatidicoX = puntoFatidicoX > 160.0? 160.0 : puntoFatidicoX;
            puntoFatidicoY = puntoFatidicoY > 120.0? 120.0 :
                puntoFatidicoY < -120? -120 : puntoFatidicoY;
            
            estamosTramandoAlgo[aTi] = true;
            comandos.add( loQueTramamos[aTi] = new ComandoIrA
                    (aTi, puntoFatidicoX, puntoFatidicoY));
            escenarioDeLaTrama[aTi] =
                    new Point((int) puntoFatidicoX, (int) puntoFatidicoY);
            acariciarElBalon[aTi] = mj[aTi].distance(bola);
        }
        
    }
    
    private void aparicionesMarianasAZidaneEpisodio5(int ronaldo)
    {
        if(puedeTirarseUnFarol(ronaldo))
            
        if(Line2D.ptSegDist(160.0, -30.0, 160.0, 30.0,
                mj[ronaldo].getX(), mj[ronaldo].getY()) < 30.0)
//                (mj[ronaldo].distance(160.0, 0.0) < 30.0)
            tiroDeLaAceitunaALaLuna(ronaldo);
        else if(villeValoDaElVistoBueno(ronaldo, new int [] {8, 9, 10}))
            return;
        else if(linierNoLevantaElBanderin(ronaldo, new int [] {8, 9, 10}))
            paseAlPie(ronaldo, efectosColateralesMasLaterales);
        else if(arbitroDejaSeguirLaJugada(ronaldo, new int [] {8, 9, 10}))
            paseQuePareceUnaCoz(ronaldo, efectosColateralesMasLaterales);
//        else if(bola.distance(contrarios[moscardon[ronaldo]]) <= 15.0 &&
//                meEstanEstresando[ronaldo] >=
//                dJugadores[ronaldo][moscardon[ronaldo]])
//            /*paseDeLaMuerte(ronaldo,
//                    analizarSituacionConLaCabezaEnNegro(ronaldo));*/
//            tiroDeLaAceitunaALaLuna(ronaldo);
        
        else if(dJugadores[ronaldo][moscardon[ronaldo]] < 10.0 &&
                mj[ronaldo].x < contrarios[moscardon[ronaldo]].x+5)
        {
            double teletransporteX = 160.0 - mj[ronaldo].x,
                   teletransporteY = mj[ronaldo].y <
                    contrarios[moscardon[ronaldo]].y ? -120.0 : 120.0;
            
            double alfa = Math.sqrt(1024.0 /
                    (teletransporteX*teletransporteX +
                     teletransporteY*teletransporteY));//Teorema de Zidane
                
            teletransporteX *= alfa;
            teletransporteY *= alfa;
            
            double telequinesiaX = bola.getX() + teletransporteX,
                   telequinesiaY = bola.getY() + teletransporteY;

            comandos.add(new ComandoGolpearBola
                    (ronaldo, telequinesiaX, telequinesiaY));
        }
        else
        {
            double salirDerrapandoX = 160.0 - mj[ronaldo].x,
                   salirDerrapandoY = -mj[ronaldo].y;
            
            double alfa = Math.sqrt(1024.0 /
                    (salirDerrapandoX*salirDerrapandoX +
                     salirDerrapandoY*salirDerrapandoY));//Teorema de Zidane
                
            double loQueElVientoSeLLevo = salirDerrapandoX *= alfa;
            double gandalf = salirDerrapandoX, saruman = loQueElVientoSeLLevo,
                   noVayamosAFaenar;
            salirDerrapandoY *= alfa;
            
            double toPalanteX = bola.getX() + salirDerrapandoX,
                   toPalanteY = bola.getY() + salirDerrapandoY;

            
            boolean cantonaaExasperado = toPalanteX > 160.0 ? true :
                    toPalanteX < -160.0 ? true : toPalanteY > 120.0 ? true :
                    toPalanteY < -120.0 ? true : false;
            
            //No tomar rumbo a Brasil
            toPalanteX = toPalanteX > 160.0? 160.0 :
                    toPalanteX < -160.0 ? -160.0 : toPalanteX;
            toPalanteY = toPalanteY > 120.0? 120.0 :
                    toPalanteY < -120.0 ? -120.0 : toPalanteY;
            
            boolean alternar = mj[ronaldo].y > 0, clamidia = true,
                    ensamblador = true;
            
            
            for(int i = 0; i < contrarios.length; i++)
                if(contrarios[i].distance(toPalanteX, toPalanteY) < 32.0 ||
                    cantonaaExasperado)
                {
                    //Barrer simultneamente los dos arcos complementarios de
                    //Lgolas
                    if(alternar)
                        //Minas Tirith
                    {
                        if(clamidia)
                        {
                            if(++gandalf > 31.0)
                                clamidia = false;
                            
                            //Notar que la primera siempre es en la frente
                            gandalf = gandalf > 32.0 ? gandalf-2 : gandalf;
                            
                            salirDerrapandoY = Math.sqrt
                                    ((noVayamosAFaenar = 1024.0-gandalf*gandalf)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        else
                        {
                            if(--gandalf <= -loQueElVientoSeLLevo)
                                //Si la compaa ha fracasado, entregar el
                                //anillo a Ronaldo para que se vuelva invisible.
                            {
                                paseFatidico(ronaldo,
                                        getListaCercanos(mj, mj[ronaldo])[1]);
                                return;
                            }
                            salirDerrapandoY = -Math.sqrt
                                    ((noVayamosAFaenar = 1024.0-gandalf*gandalf)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        salirDerrapandoX = gandalf;
                    }
                    else
                        //Minas Morgl
                    {
                        if(ensamblador)
                        {
                            if(--saruman < -31.0)
                                ensamblador = false;
                            salirDerrapandoY = Math.sqrt
                                    ((noVayamosAFaenar = 1024.0-saruman*saruman)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        else
                        {
                            if(++saruman >= -loQueElVientoSeLLevo)
                                //Si la compaa ha fracasado, entregar el
                                //anillo a Ronaldo para que se vuelva invisible.
                            {
                                paseFatidico(ronaldo,
                                        getListaCercanos(mj, mj[ronaldo])[1]);
                                return;
                            }
                            salirDerrapandoY = -Math.sqrt
                                    ((noVayamosAFaenar = 1024.0-saruman*saruman)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        salirDerrapandoX = saruman;
                    }
                    
                    alternar = !alternar;

                    
                    toPalanteX = bola.getX() + salirDerrapandoX;
                    toPalanteY = bola.getY() + salirDerrapandoY;
                    
                    cantonaaExasperado = toPalanteX > 160.0 ? true :
                        toPalanteX < -160.0 ? true : toPalanteY > 120.0 ? true :
                        toPalanteY < -120.0 ? true : false;
                    
                    toPalanteX = toPalanteX > 160.0? 160.0 :
                        toPalanteX < -160.0 ? -160.0 : toPalanteX;
                    toPalanteY = toPalanteY > 120.0? 120.0 :
                        toPalanteY < -120.0 ? -120.0 : toPalanteY;
                    
                    i = -1;//Magia potagia
                }
            

            comandos.add(new ComandoGolpearBola
                    (ronaldo, toPalanteX, toPalanteY));
        }
    }
    
    private void casillasJC()
    {
        double x = bola.getX(), y2 = bola.getY();
        
        //Movimiento portero
        double noCortaElMarSinoVuela = (elsaPataki * -160.0 + devon);
        if(noCortaElMarSinoVuela > -30.0 && noCortaElMarSinoVuela < 30.0)
            comandos.add(new ComandoIrA
                    (0, nValores[0][0], noCortaElMarSinoVuela));
        else
        {
            int y = (int)(y2 / 1.5);
            comandos.add(new ComandoIrA
                    (0, nValores[0][0], y < -30 ? -30 : y > 30 ? 30 : y));
        }
        
        double /*casillasX = mj[0].getX(),*/ casillasY = mj[0].getY();
        
        if((casillasY > 65 || casillasY < -65) &&
                mj[0].distance(bola) > contrarios[getListaCercanos
                 (contrarios, bola)[0]].distance(bola))
        {
            estamosTramandoAlgo[0] = true;
            comandos.add(loQueTramamos[0] =
                    new ComandoIrA(0, nValores[0][0], nValores[0][1]));
            escenarioDeLaTrama[0] = new Point(nValores[0][0], nValores[0][1]);
        }
        else if(sj.getMasCercanoDeBola() == 0)
            comandos.add(new ComandoIrA(0, x, y2));
        
        /*---------------------*///Mantener zona
//        if(y2 < 0)
//            y2 = 0;
//        if(x > 150)
//            x = 150;
//        else if(x < -30)
//            x = -30;
        /*---------------------*/
        
        if(nJug2 == 0)
            comandos.add(new ComandoIrA(nJug2, x, y2));
        
//        comandos.add(new ComandoPase(0,3));
//        if(casillasY < -60)
//            paseFatidico(0, 7);
//        else if(casillasY > 60)
//            paseFatidico(0,8);
//        else if(r.nextBoolean())
//            paseFatidico(0,4);
//        else
//            paseFatidico(0,5);
//        saqueDeEspuerta();
//        saqueDeEspartaco();
        saqueConLaMano();
    }
    
    private void cannavaroJC()
    {
        double x = bola.getX(), y2 = bola.getY();
        
        int y = (int)(y2 / 1.5);
        
        /*----------1----------*///Marcar
//        int marcar = sj.getContrarioMasCerca(mj[1].getX(), mj[1].getY());
//        int marcar = vistaMiPorteria[0];
        if(!cubre[1])
        {
            marcar[1] = 0;
            double d = dJugadoresMasPorteria[1][0];
            for(int i = 1; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[1][i] < d)
                {
                    d = dJugadoresMasPorteria[1][i];
                    marcar[1] = i;
                }
            cubierto[marcar[1]] = true;
            cubre [1] = true;
        }
            
//        if(vieneElCoco)
//            comandos.add(new ComandoIrA(1,
//                    contrarios[marcar[1]].getX(),
//                    contrarios[marcar[1]].getY()));
//        else
//        {
        double deltaX = Math.abs(mj[1].getX() - x)/4;
        if(mj[1].getX() > x)
            deltaX = -deltaX;
        if(mj[1].distance(bola) < tierraALaVista[1] &&
                mj[1].distance(contrarios[marcar[1]]) < 30)
            comandos.add(new ComandoIrA(1,
                    contrarios[marcar[1]].getX()+deltaX, bola.getY()));
        else
        {
            double deltaY = Math.abs(mj[1].getY() - y2)/4;
            if(mj[1].getY() > y2)
                deltaY = -deltaY;
            
            comandos.add(new ComandoIrA(1,
                    contrarios[marcar[1]].getX()+deltaX,
                    contrarios[marcar[1]].getY()+deltaY));
        }
        /*----------1----------*/

        formacionComanche(1);
        
        if(sj.getMasCercanoDeBola() == 1)
            comandos.add(new ComandoIrA(1, x, y2));
        
        else if(nJug2 == 1)
            comandos.add(new ComandoIrA(nJug2, x, y2));
        
//        if(!chuparBanquillo())
//            paseDestoQueSaleLaBotaVolando(1, new int [] {4, 8, 7, 9});
//        aparicionesMarianasAZidaneEpisodio3(1);
//        aparicionesMarianasAZidaneEpisodio5(1);
    }
    
    private void fernandoHierroJC()
    {
        double x = bola.getX(), y2 = bola.getY();
        
        int y = (int)(y2 / 1.5);
        
        /*----------1----------*///Marcar
//        int marcar = sj.getContrarioMasCerca(mj[2].getX(), mj[2].getY());
//        int marcar = vistaMiPorteria[1];
        if(!cubre[2])
        {
            double d = 800.0;//2 * diagonal campo
            for(int i = 0; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[2][i] < d)
                {
                    d = dJugadoresMasPorteria[2][i];
                    marcar[2] = i;
                }
            cubierto[marcar[2]] = true;
            cubre [2] = true;
        }
            
//        if(vieneElCoco)
//            comandos.add(new ComandoIrA(2,
//                    contrarios[marcar[2]].getX(),
//                    contrarios[marcar[2]].getY()));
//        else
//        {
        double deltaX = Math.abs(mj[2].getX() - x)/4;
        if(mj[2].getX() > x)
            deltaX = -deltaX;
        if(mj[2].distance(bola) < tierraALaVista[2] &&
                mj[2].distance(contrarios[marcar[2]]) < 30)
            comandos.add(new ComandoIrA(2,
                    contrarios[marcar[2]].getX()+deltaX, bola.getY()));
        else
        {
            double deltaY = Math.abs(mj[2].getY() - y2)/4;
            if(mj[2].getY() > y2)
                deltaY = -deltaY;
            
            comandos.add(new ComandoIrA(2,
                    contrarios[marcar[2]].getX()+deltaX,
                    contrarios[marcar[2]].getY()+deltaY));
        }
        /*----------1----------*/

        formacionComanche(2);
        
        if(sj.getMasCercanoDeBola() == 2)
            comandos.add(new ComandoIrA(2, x, y2));
        
        else if(nJug2 == 2)
            comandos.add(new ComandoIrA(nJug2, x, y2));
        
//        if(!chuparBanquillo())
//            paseDestoQueSaleLaBotaVolando(2,new int [] {4, 8, 6, 10, 7} );
//        aparicionesMarianasAZidaneEpisodio3(2);
//        aparicionesMarianasAZidaneEpisodio5(2);
    }
    
    private void mj3JC()
    {
//        if(mj[3].distance(sj.getBola()) < 15.0)
//            comandos.add(new ComandoIrA(3,160,0));
        
//        comandos.add(new ComandoPase(3,
//        sj.getMiJugadorMasCerca(mj[3].getX(), mj[3].getY())));
        
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
//        if(y < -70)
//            y = 70;
//        else if(y > 70)
//            y = 70;
//        if(x > 30)
//            x = 30;
//        else if(x < -80)
//            x = -80;
        /*---------------------*/
        
        /*----------1----------*///Marcar
        
        if(!cubre[3])
        {
            double d = 800.0;//2 * diagonal campo
            for(int i = 0; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[3][i] < d)
                {
                    d = dJugadoresMasPorteria[3][i];
                    marcar[3] = i;
                }
            cubierto[marcar[3]] = true;
            cubre [3] = true;
        }
            
//        if(vieneElCoco)
//            comandos.add(new ComandoIrA(3,
//                    contrarios[marcar[3]].getX(),
//                    contrarios[marcar[3]].getY()));
//        else
//        {
        double deltaX = Math.abs(mj[3].getX() - x)/4;
        if(mj[3].getX() > x)
            deltaX = -deltaX;
        if(mj[3].distance(bola) < tierraALaVista[3] &&
                mj[3].distance(contrarios[marcar[3]]) < 30)
            comandos.add(new ComandoIrA(3,
                    contrarios[marcar[3]].getX()+deltaX, bola.getY()));
        else
        {
            double deltaY = Math.abs(mj[3].getY() - y)/4;
            if(mj[3].getY() > y)
                deltaY = -deltaY;
            
            comandos.add(new ComandoIrA(3,
                    contrarios[marcar[3]].getX()+deltaX,
                    contrarios[marcar[3]].getY()+deltaY));
        }
        /*----------1----------*/

        formacionComanche(3);
        
        if(nJug2 == 3)
            comandos.add(new ComandoIrA(nJug2, x, y));
        else if(sj.getMasCercanoDeBola() == 3)
            comandos.add(new ComandoIrA(3, x, y));
         
//        if(r.nextBoolean())
//            paseDeLaMuerte(3,9);
//        else
//            paseDeLaMuerte(3,10);
//        if(!chuparBanquillo())
//            paseDestoQueSaleLaBotaVolando(3, new int [] {6, 10, 7});
//        aparicionesMarianasAZidaneEpisodio3(3);
//        aparicionesMarianasAZidaneEpisodio5(3);
    }
    
    private void mj4JC()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
//        if(y > 0)
//            y = 0;
//        if(x > 40)
//            x = 40;
//        else if(x < -100)
//            x = -100;
        /*---------------------*/
        
        /*----------1----------*///Marcar
        
        if(!cubre[4])
        {
            double d = 800.0;//2 * diagonal campo
            for(int i = 0; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[4][i] < d)
                {
                    d = dJugadoresMasPorteria[4][i];
                    marcar[4] = i;
                }
            cubierto[marcar[4]] = true;
            cubre [4] = true;
        }
            
//        if(vieneElCoco)
//            comandos.add(new ComandoIrA(4,
//                    contrarios[marcar[4]].getX(),
//                    contrarios[marcar[4]].getY()));
//        else
//        {
        double deltaX = Math.abs(mj[4].getX() - x)/4;
        if(mj[4].getX() > x)
            deltaX = -deltaX;
        if(mj[4].distance(bola) < tierraALaVista[4] &&
                mj[4].distance(contrarios[marcar[4]]) < 30)
            comandos.add(new ComandoIrA(4,
                    contrarios[marcar[4]].getX()+deltaX, bola.getY()));
        else
        {
            double deltaY = Math.abs(mj[4].getY() - y)/4;
            if(mj[4].getY() > y)
                deltaY = -deltaY;
            
            comandos.add(new ComandoIrA(4,
                    contrarios[marcar[4]].getX()+deltaX,
                    contrarios[marcar[4]].getY()+deltaY));
        }
        /*----------1----------*/

        formacionComanche(4);
        
        if(nJug2 == 4)
            comandos.add(new ComandoIrA(nJug2, x, y));
        else if(sj.getMasCercanoDeBola() == 4)
            comandos.add(new ComandoIrA(4, x, y));
        
//        paseDeLaMuerte(4,9);
//        paseDestoQueSaleLaBotaVolando(4, new int [] {5, 7, 6, 8, 9, 10});
//        if(siemprePositifvo(4, 8))
//            paseDeCastigo(4, 8);
//        else if(siemprePositifvo(4, 9))
//            paseDeCastigo(4, 9);
//        else
//            paseDeCastigo(4, 10);
//        chuparEstiloRonaldo(4);
//        chuparEstiloRonaldoBocadilloColgandoDeHilo(4);
//        chuparEstiloRonaldoEnElBarca(4);
//        chuparComoRobotRonaldo(4);
//        aparicionesMarianasAZidaneEpisodio3(4);
//        aparicionesMarianasAZidaneEpisodio5(4);
    }
    
    private void mj5JC()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
//        if(y < -85)
//            y = -85;
//        else if(y > 85)
//            y = 85;
//        if(x > -100)
//            x = -100;
//        else if(x < 100)
//            x = 100;
        /*---------------------*/
        
        /*----------1----------*///Marcar
        
        if(!cubre[5])
        {
            double d = 800.0;//2 * diagonal campo
            for(int i = 0; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[5][i] < d)
                {
                    d = dJugadoresMasPorteria[5][i];
                    marcar[5] = i;
                }
            cubierto[marcar[5]] = true;
            cubre [5] = true;
        }
            
        double deltaX = Math.abs(mj[5].getX() - x)/4;
        if(mj[5].getX() > x)
            deltaX = -deltaX;
        if(mj[5].distance(bola) < tierraALaVista[5] &&
                mj[5].distance(contrarios[marcar[5]]) < 30)
            comandos.add(new ComandoIrA(5,
                    contrarios[marcar[5]].getX()+deltaX, bola.getY()));
        else
        {
            double deltaY = Math.abs(mj[5].getY() - y)/4;
            if(mj[5].getY() > y)
                deltaY = -deltaY;
            
            comandos.add(new ComandoIrA(5,
                    contrarios[marcar[5]].getX()+deltaX,
                    contrarios[marcar[5]].getY()+deltaY));
        }
        /*----------1----------*/
        
        formacionComanche(5);
        
        if(nJug2 == 5)
            comandos.add(new ComandoIrA(nJug2, x, y));
        else if(sj.getMasCercanoDeBola() == 5)
            comandos.add(new ComandoIrA(5, x, y));
        
        
//        saltoDeLaRana(5);
        
//        paseDeLaMuerte(5,10);
//        paseDeGilgamesh(5, new int [] {7, 8, 9, 10});
//        chuparEstiloRonaldo(5);
//        chuparEstiloRonaldoBocadilloColgandoDeHilo(5);
//        chuparEstiloRonaldoEnElBarca(5);
//        chuparComoRobotRonaldo(5);
//        aparicionesMarianasAZidaneEpisodio3(5);
//        aparicionesMarianasAZidaneEpisodio5(5);
    }
    
    private void mj6JC()
    {
         double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
//         if(y > 10)
//             y = 10;
//         if(x < -30)
//             x = -30;
         /*---------------------*/
         
         /*----------1----------*///Marcar
        
        if(!cubre[6])
        {
            double d = 800.0;//2 * diagonal campo
            for(int i = 0; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[6][i] < d)
                {
                    d = dJugadoresMasPorteria[6][i];
                    marcar[6] = i;
                }
            cubierto[marcar[6]] = true;
            cubre [6] = true;
        }
            
        double deltaX = (x - mj[6].getX()) / 4;
        
        if(mj[6].distance(bola) < tierraALaVista[6] &&
                mj[6].distance(contrarios[marcar[6]]) < 30)
            comandos.add(new ComandoIrA(6,
                    contrarios[marcar[6]].getX()+deltaX, bola.getY()));
        else
        {
            double deltaY = (y - mj[6].getY()) / 4;
            
            comandos.add(new ComandoIrA(6,
                    contrarios[marcar[6]].getX()+deltaX,
                    contrarios[marcar[6]].getY()+deltaY));
        }
        /*----------1----------*/
        
        formacionComanche(6);
        
        if(nJug2 == 6)
             comandos.add(new ComandoIrA(nJug2, x, y));
         else if(sj.getMasCercanoDeBola() == 6)
            comandos.add(new ComandoIrA(6, x, y));
         
//         if(siemprePositifvo(6, 10))
//             paseDeCastigo(6, 10);
//         else if(siemprePositifvo(6, 9))
//             paseDeCastigo(6, 9);
//         else
//             paseDeCastigo(6, 8);
//         chuparEstiloRonaldo(6);
//         chuparEstiloRonaldoBocadilloColgandoDeHilo(6);
//         chuparEstiloRonaldoEnElBarca(6);
//         chuparComoRobotRonaldo(6);
//         aparicionesMarianasAZidaneEpisodio3(6);
//         aparicionesMarianasAZidaneEpisodio5(6);
    }
    
    private void mj7JC()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
//        if(y < -10)
//             y = -10;
//         if(x < -30)
//             x = -30;
        /*---------------------*/
        
        /*----------1----------*///Marcar
        
        if(!cubre[7])
        {
            double d = 800.0;//2 * diagonal campo
            for(int i = 0; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[7][i] < d)
                {
                    d = dJugadoresMasPorteria[7][i];
                    marcar[7] = i;
                }
            cubierto[marcar[7]] = true;
            cubre [7] = true;
        }
            
        double deltaX = (x - mj[7].getX()) / 4;
        
        if(mj[7].distance(bola) < tierraALaVista[7] &&
                mj[7].distance(contrarios[marcar[7]]) < 30)
            comandos.add(new ComandoIrA(7,
                    contrarios[marcar[7]].getX()+deltaX, bola.getY()));
        else
        {
            double deltaY = (y - mj[7].getY()) / 4;
            
            comandos.add(new ComandoIrA(7,
                    contrarios[marcar[7]].getX()+deltaX,
                    contrarios[marcar[7]].getY()+deltaY));
        }
        /*----------1----------*/
        
        formacionComanche(7);
        
        if(nJug2 == 7)
            comandos.add(new ComandoIrA(nJug2, x, y));
        else if(sj.getMasCercanoDeBola() == 7)
            comandos.add(new ComandoIrA(7, x, y));
        
//        if(mj[7].distance(new Point(160, 0)) < 90.0)
//            tiroDeLaAceitunaALaLuna(7);
//        else
//            paseDeGilgamesh(7, new int [] {8, 9, 10});
//        chuparEstiloRonaldo(7);
//        chuparEstiloRonaldoBocadilloColgandoDeHilo(7);
//        chuparEstiloRonaldoEnElBarca(7);
//        chuparComoRobotRonaldo(7);
//        aparicionesMarianasAZidaneEpisodio3(7);
//        aparicionesMarianasAZidaneEpisodio5(7);
    }
    
    private void mj8JC()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
        if(y > 10)
            y = 10;
        if(x < 0)
            x = 0;
        /*---------------------*/
        
        if(nJug2 == 8)
            comandos.add(new ComandoIrA(nJug2, x, y));
        else if(sj.getMasCercanoDeBola() == 8)
            comandos.add(new ComandoIrA(8, x, y));
        
//        if(!chuparBanquillo())
        if(mj[8].distance(160.0, 0.0) > 95)
            if(1.5*mj[8].getX()-mj[8].getY() > 270.0 ||
                1.5*mj[8].getX()+mj[8].getY() > 270.0)
                paseDeCastigo(8, listoParaRematar());
            else if(mj[8].distance(new Point(160, 0)) < 90.0)
                tiroDeLaAceitunaALaLuna(8);
            else if(siemprePositifvo(8, 9))
                paseDeCastigo(8, 9);
            else
                paseDeCastigo(8,10);
        else
            queVaAPasarElObus(8);
    }
    
    private void leoMessiJC()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
        if(x < 0)
            x = 0;
        /*---------------------*/
        
        if(nJug2 == 9)
            comandos.add(new ComandoIrA(nJug2, x, y));
        else if(sj.getMasCercanoDeBola() == 9)
            comandos.add(new ComandoIrA(9, x, y));
        
//        if(!chuparBanquillo())
        if(puedeTirarseUnFarol(9) && bola.distance(new Point(0, 0)) < 10)
            if(r.nextBoolean())
                paseFatidico(9, 1);
            else
                paseFatidico(9, 3);
        
        else if(mj[9].distance(160.0, 0.0) > 95)
            if(1.5*mj[9].getX()-mj[9].getY() > 270.0 ||
                1.5*mj[9].getX()+mj[9].getY() > 270.0)
                paseDeCastigo(9, listoParaRematar());
            else if(mj[9].distance(new Point(160, 0)) < 90.0)
                tiroDeLaAceitunaALaLuna(9);
            else if(siemprePositifvo(10, 8))
                paseDeCastigo(9, 8);
            else
                paseDeCastigo(9,10);
        else
            queVaAPasarElObus(9);
    }
    
    private void ronaldoJC()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
        if(y < -10)
            y = -10;
        if(x < 0)
            x = 0;
        /*---------------------*/
        
        if(nJug2 == 10)
            comandos.add(new ComandoIrA(nJug2, x, y));
        else if(sj.getMasCercanoDeBola() == 10)
            comandos.add(new ComandoIrA(10, x, y));
        
//        if(!chuparBanquillo())
        
        if(puedeTirarseUnFarol(10) && bola.distance(new Point(0, 0)) < 10)
            if(r.nextBoolean())
                paseFatidico(10, 1);
            else
                paseFatidico(10, 3);
        
        else if(mj[10].distance(160.0, 0.0) > 95)
            if(1.5*mj[10].getX()-mj[10].getY() > 270.0 ||
                1.5*mj[10].getX()+mj[10].getY() > 270.0)
                paseDeCastigo(10, listoParaRematar());
            else if(mj[10].distance(new Point(160, 0)) < 90.0)
                tiroDeLaAceitunaALaLuna(10);
            else if(siemprePositifvo(10, 9))
                paseDeCastigo(10, 9);
            else
                paseDeCastigo(10,8);
        else
            queVaAPasarElObus(10);
    }
    
    private void casillas_2()
    {
        double x = bola.getX(), y2 = bola.getY();
        
        //Movimiento portero
        int y = (int)(y2 / 1.5);
        if (y < -30) y = -30;
        if (y > 30) y = 30;
        comandos.add(new ComandoIrA(0,nValores[0][0], y));
        
        double /*casillasX = mj[0].getX(),*/ casillasY = mj[0].getY();
        
        if(casillasY > 65 || casillasY < -65 &&
                mj[0].distance(bola) > contrarios[getListaCercanos
                 (contrarios, bola)[0]].distance(bola))
        {
            estamosTramandoAlgo[0] = true;
            comandos.add(loQueTramamos[0] =
                    new ComandoIrA(0, nValores[0][0], nValores[0][1]));
            escenarioDeLaTrama[0] = new Point(nValores[0][0], nValores[0][1]);
        }
        else if(sj.getMasCercanoDeBola() == 0)
            comandos.add(new ComandoIrA(0, x, y2));
        
        /*---------------------*///Mantener zona
//        if(y2 < 0)
//            y2 = 0;
//        if(x > 150)
//            x = 150;
//        else if(x < -30)
//            x = -30;
        /*---------------------*/
        
        if(nJug2 == 0)
            comandos.add(new ComandoIrA(nJug2, x, y2));
        
//        comandos.add(new ComandoPase(0,3));
//        if(casillasY < -60)
//            paseFatidico(0, 7);
//        else if(casillasY > 60)
//            paseFatidico(0,8);
//        else if(r.nextBoolean())
//            paseFatidico(0,4);
//        else
//            paseFatidico(0,5);
        saqueDePuertaPower();
    }
    
    private void cannavaro_2()
    {
        double x = bola.getX(), y2 = bola.getY();
        
        int y = (int)(y2 / 1.5);
        if (y < -100) y = -100;
        if (y > -10) y = -10;
        comandos.add(new ComandoIrA(1,nValores[1][0], y));
        
        /*---------------------*///Mantener zona
        if(y2 > 0)
            y = 0;
        if(x > 0)
            x = 0;
        /*---------------------*/
        
        if(nJug2 == 1)
            comandos.add(new ComandoIrA(nJug2, x, y2));
        
        /*----------1----------*///Marcar
//        int marcar = sj.getContrarioMasCerca(mj[1].getX(), mj[1].getY());
//        int marcar = vistaMiPorteria[0];
        if(!cubre[1])
        {
            marcar[1] = 0;
            double d = dJugadoresMasPorteria[1][0];
            for(int i = 1; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[1][i] < d)
                {
                    d = dJugadoresMasPorteria[1][i];
                    marcar[1] = i;
                }
            cubierto[marcar[1]] = true;
            cubre [1] = true;
        }
            
//        if(mj[1].distance(contrarios[marcar]) < 30.0 &&
//                contrarios[marcar].getX() < -35.0 &&
//                contrarios[marcar].getY() < 0)
        double deltaX = Math.abs(mj[1].getX() - x)/4;
        if(mj[1].getX() > x)
            deltaX = -deltaX;
        double deltaY = Math.abs(mj[1].getY() - y2)/4;
        if(mj[1].getY() > y2)
            deltaY = -deltaY;
        
        comandos.add(new ComandoIrA(1,
                contrarios[marcar[1]].getX()+deltaX,
                contrarios[marcar[1]].getY()+deltaY));
        /*----------1----------*/
        
        if(sj.getMasCercanoDeBola() == 1)
            comandos.add(new ComandoIrA(1, x, y2));
        
        paseFatidico(1,7);
    }
    
    private void fernandoHierro_2()
    {
        double x = bola.getX(), y2 = bola.getY();
        
        int y = (int)(y2 / 1.5);
        if (y > 100) y = 100;
        if (y < 10) y = 10;
        comandos.add(new ComandoIrA(2,nValores[2][0], y));
        
        /*---------------------*///Mantener zona
        if(y2 < 0)
            y2 = 0;
        if(x > 0)
            x = 0;
        /*---------------------*/
        
        if(nJug2 == 2)
            comandos.add(new ComandoIrA(nJug2, x, y2));
        
        /*----------1----------*///Marcar
//        int marcar = sj.getContrarioMasCerca(mj[2].getX(), mj[2].getY());
//        int marcar = vistaMiPorteria[1];
        if(!cubre[2])
        {
            double d = 400;//2 * diagonal campo
            for(int i = 0; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[2][i] < d)
                {
                    d = dJugadoresMasPorteria[2][i];
                    marcar[2] = i;
                }
            cubierto[marcar[2]] = true;
            cubre [2] = true;
        }
            
//        if(mj[1].distance(contrarios[marcar]) < 30.0 &&
//                contrarios[marcar].getX() < -35.0 &&
//                contrarios[marcar].getY() < 0)
        double deltaX = Math.abs(mj[2].getX() - x)/4;
        if(mj[2].getX() > x)
            deltaX = -deltaX;
        double deltaY = Math.abs(mj[2].getY() - y2)/4;
        if(mj[2].getY() > y2)
            deltaY = -deltaY;
        
        comandos.add(new ComandoIrA(2,
                contrarios[marcar[2]].getX()+deltaX,
                contrarios[marcar[2]].getY()+deltaY));
        /*----------1----------*/
        
        if(sj.getMasCercanoDeBola() == 2)
            comandos.add(new ComandoIrA(2, x, y2));
        
        paseFatidico(2,8);
    }
    
    private void mj3_2()
    {
//        if(mj[3].distance(sj.getBola()) < 15.0)
//            comandos.add(new ComandoIrA(3,160,0));
        
//        comandos.add(new ComandoPase(3,
//        sj.getMiJugadorMasCerca(mj[3].getX(), mj[3].getY())));
        
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
        if(y < -70)
            y = 70;
        else if(y > 70)
            y = 70;
        if(x > 30)
            x = 30;
        else if(x < -80)
            x = -80;
        /*---------------------*/
        
        /*----------1----------*///Marcar
        
        if(!cubre[3])
        {
            double d = 400;//2 * diagonal campo
            for(int i = 0; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[3][i] < d)
                {
                    d = dJugadoresMasPorteria[3][i];
                    marcar[3] = i;
                }
            cubierto[marcar[3]] = true;
            cubre [3] = true;
        }
            
        double deltaX = Math.abs(mj[3].getX() - x)/4;
        if(mj[3].getX() > x)
            deltaX = -deltaX;
        double deltaY = Math.abs(mj[3].getY() - y)/4;
        if(mj[3].getY() > y)
            deltaY = -deltaY;
        
        comandos.add(new ComandoIrA(3,
                contrarios[marcar[3]].getX()+deltaX,
                contrarios[marcar[3]].getY()+deltaY));
        /*----------1----------*/
        
        if(nJug2 == 3)
            comandos.add(new ComandoIrA(nJug2, x, y));
         
        if(r.nextBoolean())
            paseDeLaMuerte(3,9);
        else
            paseDeLaMuerte(3,10);
    }
    
    private void mj4_2()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
        if(y > 0)
            y = 0;
        if(x > 40)
            x = 40;
        else if(x < -100)
            x = -100;
        /*---------------------*/
        
        /*----------1----------*///Marcar
        
        if(!cubre[4])
        {
            double d = 400;//2 * diagonal campo
            for(int i = 0; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[4][i] < d)
                {
                    d = dJugadoresMasPorteria[4][i];
                    marcar[4] = i;
                }
            cubierto[marcar[4]] = true;
            cubre [4] = true;
        }
            
        double deltaX = Math.abs(mj[4].getX() - x)/4;
        if(mj[4].getX() > x)
            deltaX = -deltaX;
        double deltaY = Math.abs(mj[4].getY() - y)/4;
        if(mj[4].getY() > y)
            deltaY = -deltaY;
        
        comandos.add(new ComandoIrA(4,
                contrarios[marcar[4]].getX()+deltaX,
                contrarios[marcar[4]].getY()+deltaY));
        /*----------1----------*/
        
        if(nJug2 == 4)
            comandos.add(new ComandoIrA(nJug2, x, y));
        
        paseDeLaMuerte(4,9);
    }
    
    private void mj5_2()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
        if(y < 0)
            y = 0;
        if(x > 40)
            x = 40;
        else if(x < -100)
            x = -100;
        /*---------------------*/
        
        /*----------1----------*///Marcar
        
        if(!cubre[5])
        {
            double d = 400;//2 * diagonal campo
            for(int i = 0; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[5][i] < d)
                {
                    d = dJugadoresMasPorteria[5][i];
                    marcar[5] = i;
                }
            cubierto[marcar[5]] = true;
            cubre [5] = true;
        }
            
        double deltaX = Math.abs(mj[5].getX() - x)/4;
        if(mj[5].getX() > x)
            deltaX = -deltaX;
        double deltaY = Math.abs(mj[5].getY() - y)/4;
        if(mj[5].getY() > y)
            deltaY = -deltaY;
        
        comandos.add(new ComandoIrA(5,
                contrarios[marcar[5]].getX()+deltaX,
                contrarios[marcar[5]].getY()+deltaY));
        /*----------1----------*/
        
        if(nJug2 == 5)
            comandos.add(new ComandoIrA(nJug2, x, y));
        
        paseDeLaMuerte(5,10);
    }
    
    private void mj6_2()
    {
         double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
         if(y < -70)
             y = 70;
         else if(y > 70)
             y = 70;
         if(x < -30)
             x = -30;
         else if(x > 80)
             x = 80;
         /*---------------------*/
         
         if(nJug2 == 6)
             comandos.add(new ComandoIrA(nJug2, x, y));
         
         if(x > 30.0)
             tiroDeLaAceitunaALaLuna(9);
         else if(r.nextBoolean())
//             comandos.add(new ComandoPase(6,9));
             paseDeLaMuerte(6, 9);
         else
//             comandos.add(new ComandoPase(6,10));
             paseDeLaMuerte(6, 10);
    }
    
    private void mj7_2()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
        if(y > 0)
            y = 0;
        if(x > 150)
            x = 150;
        else if(x < -30)
            x = -30;
        /*---------------------*/
        
        if(nJug2 == 7)
            comandos.add(new ComandoIrA(nJug2, x, y));
        
        paseDeLaMuerte(7, 9);
    }
    
    private void mj8_2()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
        if(y < 0)
            y = 0;
        if(x > 150)
            x = 150;
        else if(x < -30)
            x = -30;
        /*---------------------*/
        
        if(nJug2 == 8)
            comandos.add(new ComandoIrA(nJug2, x, y));
        
        paseDeLaMuerte(8,10);
    }
    
    private void leoMessi_2()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
        if(y > 0)
            y = 0;
        if(x < 0)
            x = 0;
        /*---------------------*/
        
        if(nJug2 == 9)
            comandos.add(new ComandoIrA(nJug2, x, y));
        
        if(mj[9].distance(new Point(160, 0)) < 100.0)
            if(1.5*mj[9].getX()-mj[9].getY() > 270.0 ||
                1.5*mj[9].getX()+mj[9].getY() > 270.0)
                paseDeLaMuerte(9, listoParaRematar());
            else
                tiroDeLaAceitunaALaLuna(9);
        else
//            comandos.add(new ComandoPase(9,10));
//            comandos.add(new ComandoGolpearBola(9, 50.0, -120.0));
            if(mj[9].x < 100)
                paseFatidico(9, masSoloQueLaUna());
            else
                paseFatidico(9, listoParaRematar());
    }
    
    private void ronaldo_2()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
        if(y < 0)
            y = 0;
        if(x < 0)
            x = 0;
        /*---------------------*/
        
        if(nJug2 == 10)
            comandos.add(new ComandoIrA(nJug2, x, y));
                
        if(mj[10].distance(new Point(160, 0)) < 100.0)
            if(1.5*mj[10].getX()-mj[10].getY() > 270.0 ||
                1.5*mj[10].getX()+mj[10].getY() > 270.0)
                paseDeLaMuerte(10, listoParaRematar());
            else
                tiroDeLaAceitunaALaLuna(10);
        else
//            comandos.add(new ComandoPase(10,9));
//            comandos.add(new ComandoGolpearBola(10, 50.0, 120.0));
            if(mj[10].x < 100)
                paseFatidico(10, masSoloQueLaUna());
            else
                paseFatidico(10, listoParaRematar());
    }

    private boolean villeValoDaElVistoBueno(int yo, int[] guysInHIM)
    {
        for(int i = 0; i < guysInHIM.length; i++)
            if(mj[guysInHIM[i]].x >= 65 &&
                mj[yo].distance(mj[guysInHIM[i]]) < 25.0)
            {
//                paseAlPie(yo, guysInHIM[i]);
                comandos.add(new ComandoGolpearBola(yo,
                        mj[guysInHIM[i]].getX() + (mj[guysInHIM[i]].x-mj[yo].x),
                        mj[guysInHIM[i]].getY() + (mj[guysInHIM[i]].y-mj[yo].y))
                        );
                return true;
            }
        return false;
    }
    
    private void formacionComanche(int jefeQuanah)
    {
        if(puedeTirarseUnFarol(jefeQuanah))
        {
            fuegoADiscrecion = true;
            espaniaVaBien = true;
            aparicionesMarianasAZidaneEpisodio6(jefeQuanah);
        }
        else if(fuegoADiscrecion)
        {
            int i;
            
            unBreveBucleParaRelajarLaMente:
            for(i = 0; i < ubicacionEstrategica.length &&
                    ubicacionEstrategica[i] != jefeQuanah; i++);
                
            if(espaniaVaBien &&
               mj[jefeQuanah].x < bola.x + 20 &&
               mj[jefeQuanah].x < 160)
                comandos.add(new ComandoIrA(jefeQuanah,
                        mj[jefeQuanah].getX() + 40.0, i*20.0-60.0));
            else
                comandos.add(new ComandoIrA(jefeQuanah, bola.getX(),
                        i*20.0-60.0));
            
        }
    }
    
    private void aparicionesMarianasAZidaneEpisodio6(int ronaldo)
    {
        if(puedeTirarseUnFarol(ronaldo))
            
        if(Line2D.ptSegDist(160.0, -30.0, 160.0, 30.0,
                mj[ronaldo].getX(), mj[ronaldo].getY()) < 30.0)
            tiroDeLaAceitunaALaLuna(ronaldo);
        else if(villeValoDaElVistoBueno(ronaldo, new int [] {8, 9, 10}))
            return;
        else if(linierNoLevantaElBanderin(ronaldo, new int [] {8, 9, 10}))
            paseAlPie(ronaldo, efectosColateralesMasLaterales);
        else if(arbitroDejaSeguirLaJugada(ronaldo, new int [] {8, 9, 10}))
            paseQuePareceUnaCoz(ronaldo, efectosColateralesMasLaterales);
//        else if(robarLaCartera)
//            torearDeEspaldasAlBalon(ronaldo, new int [] {1, 2, 3, 4, 5, 6, 7});
//            torearHaciendoElPino(ronaldo, new int [] {1, 2, 3, 4, 5, 6, 7});
//        else if(bola.distance(contrarios[moscardon[ronaldo]]) <= 20.0/* &&
//                meEstanEstresando[ronaldo] >=
//                dJugadores[ronaldo][moscardon[ronaldo]]*/)
//            torearContrario(ronaldo, new int [] {1, 2, 3, 4, 5, 6, 7});
        else if(todosParaUno(ronaldo))
            return;
        
        else if(dJugadores[ronaldo][moscardon[ronaldo]] < 10.0 &&
                mj[ronaldo].x < contrarios[moscardon[ronaldo]].x+5)
        {
            double teletransporteX = 160.0 - mj[ronaldo].x,
                   teletransporteY = mj[ronaldo].y <
                    contrarios[moscardon[ronaldo]].y ? -120.0 : 120.0;
            
            double alfa = Math.sqrt(1024.0 /
                    (teletransporteX*teletransporteX +
                     teletransporteY*teletransporteY));//Teorema de Zidane
                
            teletransporteX *= alfa;
            teletransporteY *= alfa;
            
            double telequinesiaX = bola.getX() + teletransporteX,
                   telequinesiaY = bola.getY() + teletransporteY;

            comandos.add(new ComandoGolpearBola
                    (ronaldo, telequinesiaX, telequinesiaY));
        }
        else
        {
            double salirDerrapandoX = 160.0 - mj[ronaldo].x,
                   salirDerrapandoY = -mj[ronaldo].y;
            
            double alfa = Math.sqrt(900.0 /
                    (salirDerrapandoX*salirDerrapandoX +
                     salirDerrapandoY*salirDerrapandoY));//Teorema de Zidane
                
            double loQueElVientoSeLLevo = salirDerrapandoX *= alfa;
            double gandalf = salirDerrapandoX, saruman = loQueElVientoSeLLevo,
                   noVayamosAFaenar;
            salirDerrapandoY *= alfa;
            
            double toPalanteX = bola.getX() + salirDerrapandoX,
                   toPalanteY = bola.getY() + salirDerrapandoY;

            
            boolean cantonaaExasperado = toPalanteX > 160.0 ? true :
                    toPalanteX < -160.0 ? true : toPalanteY > 120.0 ? true :
                    toPalanteY < -120.0 ? true : false;
            
            //No tomar rumbo a Brasil
            toPalanteX = toPalanteX > 160.0? 160.0 :
                    toPalanteX < -160.0 ? -160.0 : toPalanteX;
            toPalanteY = toPalanteY > 120.0? 120.0 :
                    toPalanteY < -120.0 ? -120.0 : toPalanteY;
            
            boolean alternar = mj[ronaldo].y > 0, clamidia = true,
                    ensamblador = true;
            
            
            for(int i = 0; i < contrarios.length; i++)
                if(contrarios[i].distance(toPalanteX, toPalanteY) < 32.0 ||
                    cantonaaExasperado)
                {
                    //Barrer simultneamente los dos arcos complementarios de
                    //Lgolas
                    if(alternar)
                        //Minas Tirith
                    {
                        if(clamidia)
                        {
                            if(++gandalf > 31.0)
                                clamidia = false;
                            
                            //Notar que la primera siempre es en la frente
                            gandalf = gandalf > 32.0 ? gandalf-2 : gandalf;
                            
                            salirDerrapandoY = Math.sqrt
                                    ((noVayamosAFaenar = 900.0-gandalf*gandalf)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        else
                        {
                            if(--gandalf <= -loQueElVientoSeLLevo)
                                //Si la compaa ha fracasado, entregar el
                                //anillo a Ronaldo para que se vuelva invisible.
                            {
                                paseFatidico(ronaldo,
                                        getListaCercanos(mj, mj[ronaldo])[1]);
                                return;
                            }
                            salirDerrapandoY = -Math.sqrt
                                    ((noVayamosAFaenar = 900.0-gandalf*gandalf)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        salirDerrapandoX = gandalf;
                    }
                    else
                        //Minas Morgl
                    {
                        if(ensamblador)
                        {
                            if(--saruman < -31.0)
                                ensamblador = false;
                            salirDerrapandoY = Math.sqrt
                                    ((noVayamosAFaenar = 900.0-saruman*saruman)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        else
                        {
                            if(++saruman >= -loQueElVientoSeLLevo)
                                //Si la compaa ha fracasado, entregar el
                                //anillo a Ronaldo para que se vuelva invisible.
                            {
                                paseFatidico(ronaldo,
                                        getListaCercanos(mj, mj[ronaldo])[1]);
                                return;
                            }
                            salirDerrapandoY = -Math.sqrt
                                    ((noVayamosAFaenar = 900.0-saruman*saruman)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        salirDerrapandoX = saruman;
                    }
                    
                    alternar = !alternar;

                    
                    toPalanteX = bola.getX() + salirDerrapandoX;
                    toPalanteY = bola.getY() + salirDerrapandoY;
                    
                    cantonaaExasperado = toPalanteX > 160.0 ? true :
                        toPalanteX < -160.0 ? true : toPalanteY > 120.0 ? true :
                        toPalanteY < -120.0 ? true : false;
                    
                    toPalanteX = toPalanteX > 160.0? 160.0 :
                        toPalanteX < -160.0 ? -160.0 : toPalanteX;
                    toPalanteY = toPalanteY > 120.0? 120.0 :
                        toPalanteY < -120.0 ? -120.0 : toPalanteY;
                    
                    i = -1;//Magia potagia
                }
            

            comandos.add(new ComandoGolpearBola
                    (ronaldo, toPalanteX, toPalanteY));
        }
    }

    private void torearContrarioVolapiee(int manolete, int[] mayorales)
    {
        double volapiee = 0.0;
        int garrocha = 10;//Last one
        
        for(int i = 0; i < mayorales.length; i++)
            if(volapiee < dJugadores[mayorales[i]][moscardon[mayorales[i]]])
            {
                volapiee = dJugadores[mayorales[i]][moscardon[mayorales[i]]];
                garrocha = mayorales[i];
            }
        
        comandos.add(new ComandoGolpearBola(manolete, mj[garrocha].getX(),
                mj[garrocha].getY() + (mj[garrocha].y-mj[manolete].y)));
    }
    
    private void torearContrario(int manolete, int[] mayorales)
    {
        int garrocha = 10;//Last one
        
        boolean vieneIslero = bola.x < contrarios[moscardon[manolete]].x;
        
        //Unas lneas freestyle dedicadas a todas aquellas personas que
        //creen que podemos hacer un mundo ms agradable y mejor
        if(vieneIslero)
            for(int i = 0; i < mayorales.length &&
                mj[(garrocha = mayorales[i])].x >=
                contrarios[moscardon[manolete]].x; i++);
        else
            for(int i = 0; i < mayorales.length &&
                mj[(garrocha = mayorales[i])].x <=
                contrarios[moscardon[manolete]].x; i++);
        
        //Suerte
        comandos.add(new ComandoGolpearBola(manolete, mj[garrocha].getX() + 50.0,
                mj[garrocha].getY() + (mj[garrocha].y-mj[manolete].y)));
        
        dosOrejasYElRabo = true;
    }
    
    private void torearDeEspaldasAlBalon(int manolete, int[] mayorales)
    {
        if(mj[ubicacionEstrategica[3]].distance
                (contrarios[moscardon[ubicacionEstrategica[3]]]) < 20.0)
            return;
        
        for(int goethe = 0; goethe < contrarios.length; goethe++)
            if(Line2D.ptSegDist(mj[manolete].getX(), mj[manolete].getY(),
               mj[ubicacionEstrategica[3]].getX(),
               mj[ubicacionEstrategica[3]].getY(),
               contrarios[goethe].getX(), contrarios[goethe].getY()) < 10.0)
                return;
        
        comandos.add(new ComandoGolpearBola(manolete,
                mj[ubicacionEstrategica[3]].getX() + 5.0,
                mj[ubicacionEstrategica[3]].getY() +
                (mj[ubicacionEstrategica[3]].y-mj[manolete].y)));
    }
    
    private void torearHaciendoElPino(int manolete, int[] mayorales)
    {
        for(int goethe = 0; goethe < contrarios.length; goethe++)
            if(Line2D.ptSegDist(mj[manolete].getX(), mj[manolete].getY(),
               mj[abanderado].getX(),
               mj[abanderado].getY(),
               contrarios[goethe].getX(), contrarios[goethe].getY()) < 10.0)
                return;
        
        comandos.add(new ComandoGolpearBola(manolete,
                mj[abanderado].getX() + 5.0,
                mj[abanderado].getY() +
                (mj[abanderado].y-mj[manolete].y)));
    }

    private void saqueConLaMano()
    {
        if(puedeTirarseUnFarol(0))
        {
            double trecho = dJugadores[1][moscardon[1]];
            int elElegido = 9;
            
            for(int i = 2; i < 8; i++)
                if(trecho < dJugadores[i][moscardon[i]] &&
                   !entrometido(0, i, contrarios))
                {
                    trecho = dJugadores[i][moscardon[i]];
                    elElegido = i;
                }
            
            if(mj[0].distance(mj[elElegido]) > 150.0)
                paseFatidico(0, elElegido);
            else
            {
                double marejadaEnX = mj[elElegido].x - mj[0].x,
                       marejadaEnY = mj[elElegido].y - mj[0].y,
                       hablemosDelMireralisssmo = 
                        (mj[elElegido].distance(mj[0]) / 2.5);
                
                hablemosDelMireralisssmo *= hablemosDelMireralisssmo;
                
                double alfa = Math.sqrt(hablemosDelMireralisssmo /
                        (marejadaEnX * marejadaEnX +
                         marejadaEnY * marejadaEnY));
                
                marejadaEnX = alfa * marejadaEnX + mj[0].getX();
                marejadaEnY = alfa * marejadaEnY + mj[0].getY();
                
                comandos.add(new ComandoGolpearBola(0,
                        marejadaEnX, marejadaEnY));
            }
        }
    }

    private void comprobarComoVaEspania()
    {
        byte recalificacionesPatrocinadasPorBolsasYMaletinesLlenos = 0;
        
        for(int i = 1; i < 8; i++)
            if(bola.distance(mj[i]) > 20.0)
                recalificacionesPatrocinadasPorBolsasYMaletinesLlenos++;
        
        if(recalificacionesPatrocinadasPorBolsasYMaletinesLlenos >= 7)
            espaniaVaBien = false;
    }

    private boolean todosParaUno(int darta)
    {
        if(darta == ubicacionEstrategica[0])
        {
//            if(contrarios[moscardon[ubicacionEstrategica[1]]].x <
//                    mj[ubicacionEstrategica[1].x - 10] ||
//                    mj[ubicacionEstrategica[1]].distance(
//                    contrarios[moscardon[ubicacionEstrategica[1]]]) > 20.0 &&
//                    )
            Polygon cuadrilateroDeLasBermudas = new Polygon
                    (new int [] {bola.x - 10,
                                 mj[ubicacionEstrategica[1]].x - 10,
                                 mj[ubicacionEstrategica[1]].x + 40,
                                 bola.x + 20},
                     new int [] {bola.y - 10,
                                 mj[ubicacionEstrategica[1]].y + 20,
                                 mj[ubicacionEstrategica[1]].y + 20,
                                 bola.y - 10},
                     4);
            if(!ohNo_TenemosUnInfiltrado(cuadrilateroDeLasBermudas, contrarios))
            {
                comandos.add(new ComandoGolpearBola(darta,
                        mj[ubicacionEstrategica[1]].getX() + 30.0,
//                         (mj[ubicacionEstrategica[1]].x-mj[darta].x),
                        mj[ubicacionEstrategica[1]].getY() +
                         (mj[ubicacionEstrategica[1]].y-mj[darta].y))
                        );
//                paseAlPie(darta, ubicacionEstrategica[1]);
                return true;
            }
        }
        else if(darta == ubicacionEstrategica[1])
        {
            Polygon cuadrilateroDeLasBermudas = new Polygon
                    (new int [] {bola.x - 10,
                                 mj[ubicacionEstrategica[2]].x - 10,
                                 mj[ubicacionEstrategica[2]].x + 40,
                                 bola.x + 20},
                     new int [] {bola.y - 10,
                                 mj[ubicacionEstrategica[2]].y + 20,
                                 mj[ubicacionEstrategica[2]].y + 20,
                                 bola.y - 10},
                     4);
            if(!ohNo_TenemosUnInfiltrado(cuadrilateroDeLasBermudas, contrarios))
            {
                comandos.add(new ComandoGolpearBola(darta,
                        mj[ubicacionEstrategica[2]].getX() + 30.0,
//                         (mj[ubicacionEstrategica[2]].x-mj[darta].x),
                        mj[ubicacionEstrategica[2]].getY() +
                         (mj[ubicacionEstrategica[2]].y-mj[darta].y))
                        );
//                paseAlPie(darta, ubicacionEstrategica[2]);
                return true;
            }
            else if(nosIntercepta(bola, contrarios))
            {
                cuadrilateroDeLasBermudas = new Polygon
                    (new int [] {bola.x - 10,
                                 mj[ubicacionEstrategica[0]].x - 10,
                                 mj[ubicacionEstrategica[0]].x + 40,
                                 bola.x + 20},
                     new int [] {bola.y + 10,
                                 mj[ubicacionEstrategica[0]].y - 20,
                                 mj[ubicacionEstrategica[0]].y - 20,
                                 bola.y + 10},
                     4);
                if(!ohNo_TenemosUnInfiltrado
                        (cuadrilateroDeLasBermudas, contrarios))
                {
                    comandos.add(new ComandoGolpearBola(darta,
                            mj[ubicacionEstrategica[0]].getX() + 30.0,
//                             (mj[ubicacionEstrategica[0]].x-mj[darta].x),
                            mj[ubicacionEstrategica[0]].getY() +
                             (mj[ubicacionEstrategica[0]].y-mj[darta].y))
                            );
//                    paseAlPie(darta, ubicacionEstrategica[0]);
                    return true;
                }
                else
                {
                    viaDeEscape(darta);
                    return true;
                }
            }
        }
        else if(darta == ubicacionEstrategica[2])
        {
            Polygon cuadrilateroDeLasBermudas = new Polygon
                    (new int [] {bola.x - 10,
                                 mj[ubicacionEstrategica[3]].x - 10,
                                 mj[ubicacionEstrategica[3]].x + 40,
                                 bola.x + 20},
                     new int [] {bola.y - 10,
                                 mj[ubicacionEstrategica[3]].y + 20,
                                 mj[ubicacionEstrategica[3]].y + 20,
                                 bola.y - 10},
                     4);
            if(!ohNo_TenemosUnInfiltrado(cuadrilateroDeLasBermudas, contrarios))
            {
                comandos.add(new ComandoGolpearBola(darta,
                        mj[ubicacionEstrategica[3]].getX() + 30.0,
//                         (mj[ubicacionEstrategica[3]].x-mj[darta].x),
                        mj[ubicacionEstrategica[3]].getY() +
                         (mj[ubicacionEstrategica[3]].y-mj[darta].y))
                        );
//                paseAlPie(darta, ubicacionEstrategica[3]);
                return true;
            }
            else if(nosIntercepta(bola, contrarios))
            {
                cuadrilateroDeLasBermudas = new Polygon
                    (new int [] {bola.x - 10,
                                 mj[ubicacionEstrategica[1]].x - 10,
                                 mj[ubicacionEstrategica[1]].x + 40,
                                 bola.x + 20},
                     new int [] {bola.y + 10,
                                 mj[ubicacionEstrategica[1]].y - 20,
                                 mj[ubicacionEstrategica[1]].y - 20,
                                 bola.y + 10},
                     4);
                if(!ohNo_TenemosUnInfiltrado
                        (cuadrilateroDeLasBermudas, contrarios))
                {
                    comandos.add(new ComandoGolpearBola(darta,
                            mj[ubicacionEstrategica[1]].getX() + 30.0,
//                             (mj[ubicacionEstrategica[1]].x-mj[darta].x),
                            mj[ubicacionEstrategica[1]].getY() +
                             (mj[ubicacionEstrategica[1]].y-mj[darta].y))
                            );
//                    paseAlPie(darta, ubicacionEstrategica[1]);
                    return true;
                }
                else
                {
                    viaDeEscape(darta);
                    return true;
                }
            }
        }
        else if(darta == ubicacionEstrategica[3])
        {
            if(nosIntercepta(bola, contrarios))
            {
                Polygon cuadrilateroDeLasBermudas = new Polygon
                    (new int [] {bola.x - 10,
                                 mj[ubicacionEstrategica[2]].x - 10,
                                 mj[ubicacionEstrategica[2]].x + 40,
                                 bola.x + 20},
                     new int [] {bola.y + 10,
                                 mj[ubicacionEstrategica[2]].y - 20,
                                 mj[ubicacionEstrategica[2]].y - 20,
                                 bola.y + 10},
                     4);
                if(!ohNo_TenemosUnInfiltrado
                        (cuadrilateroDeLasBermudas, contrarios))
                {
                    comandos.add(new ComandoGolpearBola(darta,
                            mj[ubicacionEstrategica[2]].getX() + 30.0,
//                             (mj[ubicacionEstrategica[2]].x-mj[darta].x),
                            mj[ubicacionEstrategica[2]].getY() +
                             (mj[ubicacionEstrategica[2]].y-mj[darta].y))
                            );
//                    paseAlPie(darta, ubicacionEstrategica[2]);
                    return true;
                }
                else
                {
                    cuadrilateroDeLasBermudas = new Polygon
                    (new int [] {bola.x - 10,
                                 mj[ubicacionEstrategica[4]].x - 10,
                                 mj[ubicacionEstrategica[4]].x + 40,
                                 bola.x + 20},
                     new int [] {bola.y - 10,
                                 mj[ubicacionEstrategica[4]].y + 20,
                                 mj[ubicacionEstrategica[4]].y + 20,
                                 bola.y - 10},
                     4);
                    if(!ohNo_TenemosUnInfiltrado
                            (cuadrilateroDeLasBermudas, contrarios))
                    {
                        comandos.add(new ComandoGolpearBola(darta,
                                mj[ubicacionEstrategica[4]].getX() + 30.0,
//                                 (mj[ubicacionEstrategica[4]].x-mj[darta].x),
                                mj[ubicacionEstrategica[4]].getY() +
                                 (mj[ubicacionEstrategica[4]].y-mj[darta].y))
                                );
//                        paseAlPie(darta, ubicacionEstrategica[4]);
                        return true;
                    }
                    else
                    {
                        viaDeEscape(darta);
                        return true;
                    }
                }
            }
        }
        else if(darta == ubicacionEstrategica[4])
        {
            Polygon cuadrilateroDeLasBermudas = new Polygon
                    (new int [] {bola.x - 10,
                                 mj[ubicacionEstrategica[3]].x - 10,
                                 mj[ubicacionEstrategica[3]].x + 40,
                                 bola.x + 20},
                     new int [] {bola.y + 10,
                                 mj[ubicacionEstrategica[3]].y - 20,
                                 mj[ubicacionEstrategica[3]].y - 20,
                                 bola.y + 10},
                     4);
            if(!ohNo_TenemosUnInfiltrado(cuadrilateroDeLasBermudas, contrarios))
            {
                comandos.add(new ComandoGolpearBola(darta,
                        mj[ubicacionEstrategica[3]].getX() + 30.0,
//                         (mj[ubicacionEstrategica[3]].x-mj[darta].x),
                        mj[ubicacionEstrategica[3]].getY() +
                         (mj[ubicacionEstrategica[3]].y-mj[darta].y))
                        );
//                paseAlPie(darta, ubicacionEstrategica[3]);
                return true;
            }
            else if(nosIntercepta(bola, contrarios))
            {
                cuadrilateroDeLasBermudas = new Polygon
                    (new int [] {bola.x - 10,
                                 mj[ubicacionEstrategica[5]].x - 10,
                                 mj[ubicacionEstrategica[5]].x + 40,
                                 bola.x + 20},
                     new int [] {bola.y - 10,
                                 mj[ubicacionEstrategica[5]].y + 20,
                                 mj[ubicacionEstrategica[5]].y + 20,
                                 bola.y - 10},
                     4);
                if(!ohNo_TenemosUnInfiltrado
                        (cuadrilateroDeLasBermudas, contrarios))
                {
                    comandos.add(new ComandoGolpearBola(darta,
                            mj[ubicacionEstrategica[5]].getX() + 30.0,
//                             (mj[ubicacionEstrategica[5]].x-mj[darta].x),
                            mj[ubicacionEstrategica[5]].getY() +
                             (mj[ubicacionEstrategica[5]].y-mj[darta].y))
                            );
//                    paseAlPie(darta, ubicacionEstrategica[5]);
                    return true;
                }
                else
                {
                    viaDeEscape(darta);
                    return true;
                }
            }
        }
        else if(darta == ubicacionEstrategica[5])
        {
            Polygon cuadrilateroDeLasBermudas = new Polygon
                    (new int [] {bola.x - 10,
                                 mj[ubicacionEstrategica[4]].x - 10,
                                 mj[ubicacionEstrategica[4]].x + 40,
                                 bola.x + 20},
                     new int [] {bola.y + 10,
                                 mj[ubicacionEstrategica[4]].y - 20,
                                 mj[ubicacionEstrategica[4]].y - 20,
                                 bola.y + 10},
                     4);
            if(!ohNo_TenemosUnInfiltrado(cuadrilateroDeLasBermudas, contrarios))
            {
                comandos.add(new ComandoGolpearBola(darta,
                        mj[ubicacionEstrategica[4]].getX() + 30.0,
//                         (mj[ubicacionEstrategica[4]].x-mj[darta].x),
                        mj[ubicacionEstrategica[4]].getY() +
                         (mj[ubicacionEstrategica[4]].y-mj[darta].y))
                        );
//                paseAlPie(darta, ubicacionEstrategica[4]);
                return true;
            }
            else if(nosIntercepta(bola, contrarios))
            {
                cuadrilateroDeLasBermudas = new Polygon
                    (new int [] {bola.x - 10,
                                 mj[ubicacionEstrategica[6]].x - 10,
                                 mj[ubicacionEstrategica[6]].x + 40,
                                 bola.x + 20},
                     new int [] {bola.y - 10,
                                 mj[ubicacionEstrategica[6]].y + 20,
                                 mj[ubicacionEstrategica[6]].y + 20,
                                 bola.y - 10},
                     4);
                if(!ohNo_TenemosUnInfiltrado
                        (cuadrilateroDeLasBermudas, contrarios))
                {
                    comandos.add(new ComandoGolpearBola(darta,
                            mj[ubicacionEstrategica[6]].getX() + 30.0,
//                             (mj[ubicacionEstrategica[6]].x-mj[darta].x),
                            mj[ubicacionEstrategica[6]].getY() +
                             (mj[ubicacionEstrategica[6]].y-mj[darta].y))
                            );
//                    paseAlPie(darta, ubicacionEstrategica[6]);
                    return true;
                }
                else
                {
                    viaDeEscape(darta);
                    return true;
                }
            }
        }
        else if(darta == ubicacionEstrategica[6])
        {
            Polygon cuadrilateroDeLasBermudas = new Polygon
                    (new int [] {bola.x - 10,
                                 mj[ubicacionEstrategica[5]].x - 10,
                                 mj[ubicacionEstrategica[5]].x + 40,
                                 bola.x + 20},
                     new int [] {bola.y + 10,
                                 mj[ubicacionEstrategica[5]].y - 20,
                                 mj[ubicacionEstrategica[5]].y - 20,
                                 bola.y + 10},
                     4);
            if(!ohNo_TenemosUnInfiltrado(cuadrilateroDeLasBermudas, contrarios))
            {
                comandos.add(new ComandoGolpearBola(darta,
                        mj[ubicacionEstrategica[5]].getX() + 30.0,
//                         (mj[ubicacionEstrategica[5]].x-mj[darta].x),
                        mj[ubicacionEstrategica[5]].getY() +
                         (mj[ubicacionEstrategica[5]].y-mj[darta].y))
                        );
//                paseAlPie(darta, ubicacionEstrategica[5]);
                return true;
            }
        }
        return false;
    }

    private boolean ohNo_TenemosUnInfiltrado
            (Polygon areaRestringida, Point[] sospechosos)
    {
        for(int posibleTopo=0; posibleTopo<sospechosos.length; posibleTopo++)
            if(areaRestringida.contains(sospechosos[posibleTopo]))
                return true;
        
        return false;
    }

    private boolean nosIntercepta(Point bola, Point[] aguafiestas)
    {
        Point espejismo = new Point(bola);
        espejismo.translate(15, 0);
        
        for(int guy = 0; guy < aguafiestas.length; guy++)
            if(bola.distance(aguafiestas[guy]) < 25.0 ||
                espejismo.distance(aguafiestas[guy]) < 20)
                return true;
        
        return false;
    }

    private void viaDeEscape(int elReo)
    {
//        paseFatidico(elReo, 0);
//        tiroDeLaAceitunaALaLuna(elReo);
//        torearContrario(elReo, new int [] {1, 2, 3, 4, 5, 6, 7});
        aparicionesMarianasAZidaneEpisodio5(elReo);
    }
    
    private void casillas_3()
    {
        double x = bola.getX(), y2 = bola.getY();
        
        //Movimiento portero
        double noCortaElMarSinoVuela = (elsaPataki * -160.0 + devon);
        if(noCortaElMarSinoVuela > -30.0 && noCortaElMarSinoVuela < 30.0)
            comandos.add(new ComandoIrA
                    (0, nValores[0][0], noCortaElMarSinoVuela));
        else
        {
            int y = (int)(y2 / 1.5);
            comandos.add(new ComandoIrA
                    (0, nValores[0][0], y < -30 ? -30 : y > 30 ? 30 : y));
        }
        
        double /*casillasX = mj[0].getX(),*/ casillasY = mj[0].getY();
        
        if((casillasY > 65 || casillasY < -65) &&
                mj[0].distance(bola) > contrarios[getListaCercanos
                 (contrarios, bola)[0]].distance(bola))
        {
            estamosTramandoAlgo[0] = true;
            comandos.add(loQueTramamos[0] =
                    new ComandoIrA(0, nValores[0][0], nValores[0][1]));
            escenarioDeLaTrama[0] = new Point(nValores[0][0], nValores[0][1]);
        }
        else if(sj.getMasCercanoDeBola() == 0)
            comandos.add(new ComandoIrA(0, x, y2));
        
        
        if(nJug2 == 0)
            comandos.add(new ComandoIrA(nJug2, x, y2));
        
        saqueConLaMano();
    }
    
    private void cannavaro_3()
    {
        double x = bola.getX(), y2 = bola.getY();
        
        int y = (int)(y2 / 1.5);
        
        /*----------1----------*///Marcar
        if(!cubre[1])
        {
            marcar[1] = 0;
            double d = dJugadoresMasPorteria[1][0];
            for(int i = 1; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[1][i] < d)
                {
                    d = dJugadoresMasPorteria[1][i];
                    marcar[1] = i;
                }
            cubierto[marcar[1]] = true;
            cubre [1] = true;
        }
        
        double deltaX = Math.abs(mj[1].getX() - x)/4;
        if(mj[1].getX() > x)
            deltaX = -deltaX;
        if(mj[1].distance(bola) < tierraALaVista[1] &&
                mj[1].distance(contrarios[marcar[1]]) < 30)
            comandos.add(new ComandoIrA(1,
                    contrarios[marcar[1]].getX()+deltaX, bola.getY()));
        else
        {
            double deltaY = Math.abs(mj[1].getY() - y2)/4;
            if(mj[1].getY() > y2)
                deltaY = -deltaY;
            
            comandos.add(new ComandoIrA(1,
                    contrarios[marcar[1]].getX()+deltaX,
                    contrarios[marcar[1]].getY()+deltaY));
        }
        /*----------1----------*/

        desinformacionComanche(1);
        
//        if(!espaniaVaBien)
//        {
//            if(sj.getMasCercanoDeBola() == 1)
//                comandos.add(new ComandoIrA(1, x, y2));
//            
//            else if(nJug2 == 1)
//                comandos.add(new ComandoIrA(nJug2, x, y2));
//        }
    }
    
    private void fernandoHierro_3()
    {
        double x = bola.getX(), y2 = bola.getY();
        
        int y = (int)(y2 / 1.5);
        
        /*----------1----------*///Marcar
        if(!cubre[2])
        {
            double d = 800.0;//2 * diagonal campo
            for(int i = 0; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[2][i] < d)
                {
                    d = dJugadoresMasPorteria[2][i];
                    marcar[2] = i;
                }
            cubierto[marcar[2]] = true;
            cubre [2] = true;
        }
            
        double deltaX = Math.abs(mj[2].getX() - x)/4;
        if(mj[2].getX() > x)
            deltaX = -deltaX;
        if(mj[2].distance(bola) < tierraALaVista[2] &&
                mj[2].distance(contrarios[marcar[2]]) < 30)
            comandos.add(new ComandoIrA(2,
                    contrarios[marcar[2]].getX()+deltaX, bola.getY()));
        else
        {
            double deltaY = Math.abs(mj[2].getY() - y2)/4;
            if(mj[2].getY() > y2)
                deltaY = -deltaY;
            
            comandos.add(new ComandoIrA(2,
                    contrarios[marcar[2]].getX()+deltaX,
                    contrarios[marcar[2]].getY()+deltaY));
        }
        /*----------1----------*/

        desinformacionComanche(2);
        
//        if(!espaniaVaBien)
//        {
//            if(sj.getMasCercanoDeBola() == 2)
//                comandos.add(new ComandoIrA(2, x, y2));
//            
//            else if(nJug2 == 2)
//                comandos.add(new ComandoIrA(nJug2, x, y2));
//        }
    }
    
    private void mj3_3()
    {
        double x = bola.getX(), y = bola.getY();
        
        
        /*----------1----------*///Marcar
        
        if(!cubre[3])
        {
            double d = 800.0;//2 * diagonal campo
            for(int i = 0; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[3][i] < d)
                {
                    d = dJugadoresMasPorteria[3][i];
                    marcar[3] = i;
                }
            cubierto[marcar[3]] = true;
            cubre [3] = true;
        }
            
        double deltaX = Math.abs(mj[3].getX() - x)/4;
        if(mj[3].getX() > x)
            deltaX = -deltaX;
        if(mj[3].distance(bola) < tierraALaVista[3] &&
                mj[3].distance(contrarios[marcar[3]]) < 30)
            comandos.add(new ComandoIrA(3,
                    contrarios[marcar[3]].getX()+deltaX, bola.getY()));
        else
        {
            double deltaY = Math.abs(mj[3].getY() - y)/4;
            if(mj[3].getY() > y)
                deltaY = -deltaY;
            
            comandos.add(new ComandoIrA(3,
                    contrarios[marcar[3]].getX()+deltaX,
                    contrarios[marcar[3]].getY()+deltaY));
        }
        /*----------1----------*/

        desinformacionComanche(3);
        
//        if(!espaniaVaBien)
//        {
//            if(nJug2 == 3)
//                comandos.add(new ComandoIrA(nJug2, x, y));
//            else if(sj.getMasCercanoDeBola() == 3)
//                comandos.add(new ComandoIrA(3, x, y));
//        }
         
    }
    
    private void mj4_3()
    {
        double x = bola.getX(), y = bola.getY();
        
        
        /*----------1----------*///Marcar
        
        if(!cubre[4])
        {
            double d = 800.0;//2 * diagonal campo
            for(int i = 0; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[4][i] < d)
                {
                    d = dJugadoresMasPorteria[4][i];
                    marcar[4] = i;
                }
            cubierto[marcar[4]] = true;
            cubre [4] = true;
        }
            
        double deltaX = Math.abs(mj[4].getX() - x)/4;
        if(mj[4].getX() > x)
            deltaX = -deltaX;
        if(mj[4].distance(bola) < tierraALaVista[4] &&
                mj[4].distance(contrarios[marcar[4]]) < 30)
            comandos.add(new ComandoIrA(4,
                    contrarios[marcar[4]].getX()+deltaX, bola.getY()));
        else
        {
            double deltaY = Math.abs(mj[4].getY() - y)/4;
            if(mj[4].getY() > y)
                deltaY = -deltaY;
            
            comandos.add(new ComandoIrA(4,
                    contrarios[marcar[4]].getX()+deltaX,
                    contrarios[marcar[4]].getY()+deltaY));
        }
        /*----------1----------*/

        desinformacionComanche(4);
        
//        if(!espaniaVaBien)
//        {
//            if(nJug2 == 4)
//                comandos.add(new ComandoIrA(nJug2, x, y));
//            else if(sj.getMasCercanoDeBola() == 4)
//                comandos.add(new ComandoIrA(4, x, y));
//        }
    }
    
    private void mj5_3()
    {
        double x = bola.getX(), y = bola.getY();
        
        
//        /*----------1----------*///Marcar
//        
//        if(!cubre[5])
//        {
//            double d = 800.0;//2 * diagonal campo
//            for(int i = 0; i < 11; i++)
//                if(!cubierto[i] && dJugadoresMasPorteria[5][i] < d)
//                {
//                    d = dJugadoresMasPorteria[5][i];
//                    marcar[5] = i;
//                }
//            cubierto[marcar[5]] = true;
//            cubre [5] = true;
//        }
//            
//        double deltaX = Math.abs(mj[5].getX() - x)/4;
//        if(mj[5].getX() > x)
//            deltaX = -deltaX;
//        if(mj[5].distance(bola) < tierraALaVista[5] &&
//                mj[5].distance(contrarios[marcar[5]]) < 30)
//            comandos.add(new ComandoIrA(5,
//                    contrarios[marcar[5]].getX()+deltaX, bola.getY()));
//        else
//        {
//            double deltaY = Math.abs(mj[5].getY() - y)/4;
//            if(mj[5].getY() > y)
//                deltaY = -deltaY;
//            
//            comandos.add(new ComandoIrA(5,
//                    contrarios[marcar[5]].getX()+deltaX,
//                    contrarios[marcar[5]].getY()+deltaY));
//        }
//        /*----------1----------*/
        
        desinformacionComanche(5);
        
//        if(nJug2 == 5)
//            comandos.add(new ComandoIrA(nJug2, x, y));
//        else if(sj.getMasCercanoDeBola() == 5)
//            comandos.add(new ComandoIrA(5, x, y));
    }
    
    private void mj6_3()
    {
         double x = bola.getX(), y = bola.getY();
        
         
         /*----------1----------*///Marcar
        
        if(!cubre[6])
        {
            double d = 800.0;//2 * diagonal campo
            for(int i = 0; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[6][i] < d)
                {
                    d = dJugadoresMasPorteria[6][i];
                    marcar[6] = i;
                }
            cubierto[marcar[6]] = true;
            cubre [6] = true;
        }
            
        double deltaX = (x - mj[6].getX()) / 4;
        
        if(mj[6].distance(bola) < tierraALaVista[6] &&
                mj[6].distance(contrarios[marcar[6]]) < 30)
            comandos.add(new ComandoIrA(6,
                    contrarios[marcar[6]].getX()+deltaX, bola.getY()));
        else
        {
            double deltaY = (y - mj[6].getY()) / 4;
            
            comandos.add(new ComandoIrA(6,
                    contrarios[marcar[6]].getX()+deltaX,
                    contrarios[marcar[6]].getY()+deltaY));
        }
        /*----------1----------*/
        
        desinformacionComanche(6);
        
//        if(!espaniaVaBien)
//        {
//            if(nJug2 == 6)
//                comandos.add(new ComandoIrA(nJug2, x, y));
//            else if(sj.getMasCercanoDeBola() == 6)
//                comandos.add(new ComandoIrA(6, x, y));
//        }  
    }
    
    private void mj7_3()
    {
        double x = bola.getX(), y = bola.getY();
        
        
        /*----------1----------*///Marcar
        
        if(!cubre[7])
        {
            double d = 800.0;//2 * diagonal campo
            for(int i = 0; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[7][i] < d)
                {
                    d = dJugadoresMasPorteria[7][i];
                    marcar[7] = i;
                }
            cubierto[marcar[7]] = true;
            cubre [7] = true;
        }
            
        double deltaX = (x - mj[7].getX()) / 4;
        
        if(mj[7].distance(bola) < tierraALaVista[7] &&
                mj[7].distance(contrarios[marcar[7]]) < 30)
            comandos.add(new ComandoIrA(7,
                    contrarios[marcar[7]].getX()+deltaX, bola.getY()));
        else
        {
            double deltaY = (y - mj[7].getY()) / 4;
            
            comandos.add(new ComandoIrA(7,
                    contrarios[marcar[7]].getX()+deltaX,
                    contrarios[marcar[7]].getY()+deltaY));
        }
        /*----------1----------*/
        
        desinformacionComanche(7);
        
//        if(!espaniaVaBien)
//        {
//            if(nJug2 == 7)
//                comandos.add(new ComandoIrA(nJug2, x, y));
//            else if(sj.getMasCercanoDeBola() == 7)
//                comandos.add(new ComandoIrA(7, x, y));
//        } 
    }
    
    private void mj8_3()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
        if(y > 10)
            y = 10;
        if(x < 0)
            x = 0;
        /*---------------------*/
        
        if(nJug2 == 8)
            comandos.add(new ComandoIrA(nJug2, x, y));
        else if(sj.getMasCercanoDeBola() == 8)
            comandos.add(new ComandoIrA(8, x, y));
        
        if(mj[8].distance(160.0, 0.0) > 95)
            if(1.5*mj[8].getX()-mj[8].getY() > 270.0 ||
                1.5*mj[8].getX()+mj[8].getY() > 270.0)
                paseDeCastigo(8, listoParaRematar());
            else if(mj[8].x > 55)//distance(new Point(160, 0)) < 90.0)
                tiroDeLaAceitunaALaLuna(8);
            else if(siemprePositifvo(8, 9))
                paseDeCastigo(8, 9);
            else
                paseDeCastigo(8,10);
//        else
//            queVaAPasarElObus(8);
    }
    
    private void leoMessi_3()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
        if(x < 0)
            x = 0;
        /*---------------------*/
        
        if(nJug2 == 9)
            comandos.add(new ComandoIrA(nJug2, x, y));
        else if(sj.getMasCercanoDeBola() == 9)
            comandos.add(new ComandoIrA(9, x, y));
        
//        if(!chuparBanquillo())
        if(puedeTirarseUnFarol(9) && bola.distance(new Point(0, 0)) < 10)
            if(r.nextBoolean())
                paseFatidico(9, 1);
            else
                paseFatidico(9, 3);
        
        else if(mj[9].distance(160.0, 0.0) > 95)
            if(1.5*mj[9].getX()-mj[9].getY() > 270.0 ||
                1.5*mj[9].getX()+mj[9].getY() > 270.0)
                paseDeCastigo(9, listoParaRematar());
            else if(mj[9].x > 55)//distance(new Point(160, 0)) < 90.0)
                tiroDeLaAceitunaALaLuna(9);
            else if(siemprePositifvo(10, 8))
                paseDeCastigo(9, 8);
            else
                paseDeCastigo(9,10);
//        else
//            queVaAPasarElObus(9);
    }
    
    private void ronaldo_3()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
        if(y < -10)
            y = -10;
        if(x < 0)
            x = 0;
        /*---------------------*/
        
        if(nJug2 == 10)
            comandos.add(new ComandoIrA(nJug2, x, y));
        else if(sj.getMasCercanoDeBola() == 10)
            comandos.add(new ComandoIrA(10, x, y));
        
        
        if(puedeTirarseUnFarol(10) && bola.distance(new Point(0, 0)) < 10)
            if(r.nextBoolean())
                paseFatidico(10, 1);
            else
                paseFatidico(10, 3);
        
        else if(mj[10].distance(160.0, 0.0) > 95)
            if(1.5*mj[10].getX()-mj[10].getY() > 270.0 ||
                1.5*mj[10].getX()+mj[10].getY() > 270.0)
                paseDeCastigo(10, listoParaRematar());
            else if(mj[10].x/*distance(new Point(160, 0)) < 60.0*/> 55)
                tiroDeLaAceitunaALaLuna(10);
            else if(siemprePositifvo(10, 9))
                paseDeCastigo(10, 9);
            else
                paseDeCastigo(10,8);
//        else
//            queVaAPasarElObus(10);
    }
    
    private void desinformacionComanche(int periodistaGuay)
    {
//        if(fuegoADiscrecion)
        
        /*int i;

        unBreveBucleParaRelajarLaMente:
        for(i = 0; i < ubicacionEstrategica.length &&
                ubicacionEstrategica[i] != periodistaGuay; i++);

        double esperpentoEnX = i == 0 ?   0.0 : i == 1 ?  17.0 : i == 2 ?
            -17.0 : i == 3 ? 0.0 : i == 4 ? -17.0 : i == 5 ? 17.0 :  0.0,
               esperpentoEnY = i == 0 ? -20.0 : i == 1 ? -10.0 : i == 2 ?
            -10.0 : i == 3 ? 0.0 : i == 4 ?  10.0 : i == 5 ? 10.0 : 20.0;*/

        double esperpentoEnX = periodistaGuay == 4 ?   0.0 :
            periodistaGuay == 7 ?  17.0 : periodistaGuay == 1 ? -17.0 :
            periodistaGuay == 5 ?   0.0 : periodistaGuay == 2 ? -17.0 :
            periodistaGuay == 6 ?  17.0 :  0.0,
               esperpentoEnY = periodistaGuay == 4 ? -20.0 :
            periodistaGuay == 7 ? -10.0 : periodistaGuay == 1 ? -10.0 :
            periodistaGuay == 5 ?   0.0 : periodistaGuay == 2 ?  10.0 :
            periodistaGuay == 6 ?  10.0 : 20.0;

//        if(espaniaVaBien &&
//           mj[periodistaGuay].x < 160)
//            comandos.add(new ComandoIrA(periodistaGuay,
//                    /*bola.getX() +*/ esperpentoEnX,
//                    /*bola.getY() +*/ esperpentoEnY));
//        else
//            comandos.add(new ComandoIrA(periodistaGuay,
//                    bola.getX(), bola.getY()));
        if(periodistaGuay == 5)
            if(!lineasCerradas())
                comandos.add(new ComandoIrA(periodistaGuay,
                        mj[5].getX() + esperpentoEnX,
                        mj[5].getY() + esperpentoEnY));
            else if(!huimosConElBotin())
                comandos.add(new ComandoIrA(periodistaGuay,
                        bola.getX() + esperpentoEnX,
                        bola.getY() + esperpentoEnY));
            else
//                comandos.add(new ComandoIrA(periodistaGuay,
//                        /*mj[5].getX(),//*/210.0,//bola.getX() + esperpentoEnX,
//                        /*mj[5].getY()));//*/0.0));//bola.getY() + esperpentoEnY));
////            {
////                if(moverAbajo)
////                    comandos.add(new ComandoIrA(periodistaGuay,
////                            mj[5].getX(),
////                            mj[5].getY()+40.0));
////                else
////                    comandos.add(new ComandoIrA(periodistaGuay,
////                            mj[5].getX(),
////                            mj[5].getY()-40.0));
////                
////                if(mj[5].y < -110)
////                    moverAbajo = true;
////                if(mj[5].y > 110)
////                    moverAbajo = false;
////            }
                aPorEllasOee(periodistaGuay);

        else
            comandos.add(new ComandoIrA(periodistaGuay,
                    mj[5].getX() + esperpentoEnX,
                    mj[5].getY() + esperpentoEnY));
            
        if(puedeTirarseUnFarol(periodistaGuay))
        {
            fuegoADiscrecion = true;
            espaniaVaBien = true;
//            aPorEllosOee(periodistaGuay);
            arrastrarBotin();
        }
    }
    
    private void aPorEllosOee(int ronaldo)
    {
        if(puedeTirarseUnFarol(ronaldo))
            
        /*if(Line2D.ptSegDist(160.0, -30.0, 160.0, 30.0,
                mj[ronaldo].getX(), mj[ronaldo].getY()) < 30.0)
            tiroDeLaAceitunaALaLuna(ronaldo);
        else*/ if(villeValoDaElVistoBueno(ronaldo, new int [] {8, 9, 10}))
            return;
        else if(linierNoLevantaElBanderin(ronaldo, new int [] {8, 9, 10}))
            paseAlPie(ronaldo, efectosColateralesMasLaterales);
        else if(arbitroDejaSeguirLaJugada(ronaldo, new int [] {8, 9, 10}))
            paseQuePareceUnaCoz(ronaldo, efectosColateralesMasLaterales);
        
        else if(dJugadores[ronaldo][moscardon[ronaldo]] < 10.0 &&
                mj[ronaldo].x < contrarios[moscardon[ronaldo]].x+5)
        {
            double teletransporteX = 160.0 - mj[ronaldo].x,
                   teletransporteY = mj[ronaldo].y <
                    contrarios[moscardon[ronaldo]].y ? -120.0 : 120.0;
            
            double alfa = Math.sqrt(625.0 /
                    (teletransporteX*teletransporteX +
                     teletransporteY*teletransporteY));//Teorema de Zidane
                
            teletransporteX *= alfa;
            teletransporteY *= alfa;
            
            double telequinesiaX = bola.getX() + teletransporteX,
                   telequinesiaY = bola.getY() + teletransporteY;

            comandos.add(new ComandoGolpearBola
                    (ronaldo, telequinesiaX, telequinesiaY));
        }
        else
        {
            double salirDerrapandoX = mj[9].x - mj[ronaldo].x,
                   salirDerrapandoY = mj[9].y - mj[ronaldo].y;
            
            double alfa = Math.sqrt(625.0 /
                    (salirDerrapandoX*salirDerrapandoX +
                     salirDerrapandoY*salirDerrapandoY));//Teorema de Zidane
                
            double loQueElVientoSeLLevo = salirDerrapandoX *= alfa;
            double gandalf = salirDerrapandoX, saruman = loQueElVientoSeLLevo,
                   noVayamosAFaenar;
            salirDerrapandoY *= alfa;
            
            double toPalanteX = bola.getX() + salirDerrapandoX,
                   toPalanteY = bola.getY() + salirDerrapandoY;

            
            boolean cantonaaExasperado = toPalanteX > 160.0 ? true :
                    toPalanteX < -160.0 ? true : toPalanteY > 120.0 ? true :
                    toPalanteY < -120.0 ? true : false;
            
            //No tomar rumbo a Brasil
            toPalanteX = toPalanteX > 160.0? 160.0 :
                    toPalanteX < -160.0 ? -160.0 : toPalanteX;
            toPalanteY = toPalanteY > 120.0? 120.0 :
                    toPalanteY < -120.0 ? -120.0 : toPalanteY;
            
            boolean alternar = mj[ronaldo].y > 0, clamidia = true,
                    ensamblador = true;
            
            
            for(int i = 0; i < contrarios.length; i++)
                if(contrarios[i].distance(toPalanteX, toPalanteY) < 32.0 ||
                    cantonaaExasperado)
                {
                    //Barrer simultneamente los dos arcos complementarios de
                    //Lgolas
                    if(alternar)
                        //Minas Tirith
                    {
                        if(clamidia)
                        {
                            if(++gandalf > 31.0)
                                clamidia = false;
                            
                            //Notar que la primera siempre es en la frente
                            gandalf = gandalf > 32.0 ? gandalf-2 : gandalf;
                            
                            salirDerrapandoY = Math.sqrt
                                    ((noVayamosAFaenar = 625.0-gandalf*gandalf)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        else
                        {
                            if(--gandalf <= -loQueElVientoSeLLevo)
                                //Si la compaa ha fracasado, entregar el
                                //anillo a Ronaldo para que se vuelva invisible.
                            {
                                paseFatidico(ronaldo,
                                        getListaCercanos(mj, mj[ronaldo])[1]);
                                return;
                            }
                            salirDerrapandoY = -Math.sqrt
                                    ((noVayamosAFaenar = 625.0-gandalf*gandalf)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        salirDerrapandoX = gandalf;
                    }
                    else
                        //Minas Morgl
                    {
                        if(ensamblador)
                        {
                            if(--saruman < -31.0)
                                ensamblador = false;
                            salirDerrapandoY = Math.sqrt
                                    ((noVayamosAFaenar = 625.0-saruman*saruman)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        else
                        {
                            if(++saruman >= -loQueElVientoSeLLevo)
                                //Si la compaa ha fracasado, entregar el
                                //anillo a Ronaldo para que se vuelva invisible.
                            {
                                paseFatidico(ronaldo,
                                        getListaCercanos(mj, mj[ronaldo])[1]);
                                return;
                            }
                            salirDerrapandoY = -Math.sqrt
                                    ((noVayamosAFaenar = 625.0-saruman*saruman)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        salirDerrapandoX = saruman;
                    }
                    
                    alternar = !alternar;

                    
                    toPalanteX = bola.getX() + salirDerrapandoX;
                    toPalanteY = bola.getY() + salirDerrapandoY;
                    
                    cantonaaExasperado = toPalanteX > 160.0 ? true :
                        toPalanteX < -160.0 ? true : toPalanteY > 120.0 ? true :
                        toPalanteY < -120.0 ? true : false;
                    
                    toPalanteX = toPalanteX > 160.0? 160.0 :
                        toPalanteX < -160.0 ? -160.0 : toPalanteX;
                    toPalanteY = toPalanteY > 120.0? 120.0 :
                        toPalanteY < -120.0 ? -120.0 : toPalanteY;
                    
                    i = -1;//Magia potagia
                }
            

            comandos.add(new ComandoGolpearBola
                    (ronaldo, toPalanteX, toPalanteY));
        }
    }

    private boolean lineasCerradas()
    {
        if(!cerrarLineas)
            cerrarLineas =
                    mj[1].distance(mj[5]) < 22.0 &&
                    mj[2].distance(mj[5]) < 22.0 &&
                    mj[3].distance(mj[5]) < 22.0 &&
                    mj[4].distance(mj[5]) < 22.0 &&
                    mj[6].distance(mj[5]) < 22.0 &&
                    mj[7].distance(mj[5]) < 22.0 ? true : false;
        
        return cerrarLineas;
    }

    private boolean huimosConElBotinv1()
    {
        if(!huirConElBotin)
            huirConElBotin =
                    puedeTirarseUnFarol(1) ||
                    puedeTirarseUnFarol(2) ||
                    puedeTirarseUnFarol(3) ||
                    puedeTirarseUnFarol(4) ||
                    puedeTirarseUnFarol(5) ||
                    puedeTirarseUnFarol(6) ||
                    puedeTirarseUnFarol(7) ? true : false;
        
        return huirConElBotin;
    }
    
    private boolean huimosConElBotin()
    {
        huirConElBotin =
                    puedeTirarseUnFarol(1) ||
                    puedeTirarseUnFarol(2) ||
                    puedeTirarseUnFarol(3) ||
                    puedeTirarseUnFarol(4) ||
                    puedeTirarseUnFarol(5) ||
                    puedeTirarseUnFarol(6) ||
                    puedeTirarseUnFarol(7) ? true : false;
        
        intervencionDivina = huirConElBotin == true ? true : intervencionDivina;
        
        if(intervencionDivina)
        {
            Polygon p = new Polygon(
                    new int [] {mj[5].x, mj[5].x-30, mj[5].x-30,
                                mj[5].x, mj[5].x+30, mj[5].x+30},
                    new int [] {mj[5].y-30, mj[5].y-20, mj[5].y+20,
                                mj[5].y+30, mj[5].y+20, mj[5].y-20},
                    6);

            if(p.contains(bola))
                huirConElBotin = true;
            
            intervencionDivina =
                    huirConElBotin == false ? false : intervencionDivina;
        }
        
        return huirConElBotin;
    }

    private void arrastrarBotiquin()
    {
        for(int i = 1; i < 8; i++)
            if(puedeTirarseUnFarol(i))
            {
                double rocinanteX = 210.0 - mj[i].x,
                       rocinanteY = -mj[i].y;

                double delta = Math.sqrt(900.0 /
                        (rocinanteX*rocinanteX +
                         rocinanteY*rocinanteY));

                rocinanteX *= delta;
                rocinanteY *= delta;

                double molinoX = bola.getX() + rocinanteX,
                       molinoY = bola.getY() + rocinanteY;

                comandos.add(new ComandoGolpearBola
                        (i, molinoX, molinoY));
                return;
            }
    }
    
    private void arrastrarBotina()
    {
        if(puedeTirarseUnFarol(1))
            if(!entrometido(1, 2, contrarios))
                paseDeRabona(1, 2);
            else
                paseDeRabona(1, 4);
        else if(puedeTirarseUnFarol(2))
            if(!entrometido(2, 3, contrarios))
                paseDeRabona(2, 3);
            else
            paseDeRabona(2, 1);
        else if(puedeTirarseUnFarol(3))
            if(!entrometido(3, 6, contrarios))
                paseDeRabona(3, 6);
            else
                paseDeRabona(3, 2);
        else if(puedeTirarseUnFarol(6))
            if(!entrometido(6, 7, contrarios))
                paseDeRabona(6, 7);
            else
                paseDeRabona(6, 3);
        else if(puedeTirarseUnFarol(7))
            if(!entrometido(7, 4, contrarios))
                paseDeRabona(7, 4);
            else
                paseDeRabona(7, 6);
        else if(puedeTirarseUnFarol(4))
            if(!entrometido(4, 1, contrarios))
                paseDeRabona(4, 1);
            else
                paseDeRabona(4, 7);
        else
            if(!entrometido(5, 7, contrarios))
                paseDeRabona(5, 7);
            else if(!entrometido(5, 6, contrarios))
                paseDeRabona(5, 6);
            else if(!entrometido(5, 3, contrarios))
                paseDeRabona(5, 3);
            else if(!entrometido(5, 2, contrarios))
                paseDeRabona(5, 2);
            else if(!entrometido(5, 1, contrarios))
                paseDeRabona(5, 1);
            else
                paseDeRabona(5, 4);
        
    }

    private void paseDeLaRatona(int yo, int aTi)
    {
        int desfiladero = mj[aTi].y - mj[yo].y;
        
        double rocinanteX = mj[aTi].x - mj[yo].x,
               rocinanteY = mj[aTi].y - mj[yo].y;

        double delta = Math.sqrt(2500.0 /
                (rocinanteX*rocinanteX +
                 rocinanteY*rocinanteY));

        rocinanteX *= delta;
        rocinanteY *= delta;

        double molinoX = bola.getX() + rocinanteX,
               molinoY = bola.getY() + rocinanteY;
        
        comandos.add(new ComandoGolpearBola(yo,
                mj[aTi].getX()+rocinanteX, mj[aTi].getY()+rocinanteY));
    }
    
    private void paseDeRabona(int yo, int aTi)
    {
//        int desfiladero = mj[aTi].y - mj[yo].y;
        
        double rocinanteX = mj[aTi].x - 1.6 * velocidadDelTocinoX - bola.x,
               rocinanteY = mj[aTi].y - 1.6 * velocidadDelTocinoY - bola.y;

        double delta = Math.sqrt(3600.0 /
                (rocinanteX * rocinanteX + rocinanteY * rocinanteY));

        rocinanteX *= delta;
        rocinanteY *= delta;

        double molinoX = bola.getX() + rocinanteX,
               molinoY = bola.getY() + rocinanteY;
        
        comandos.add(new ComandoGolpearBola(yo,
                molinoX, molinoY));
    }

    private boolean entrometido(int importunado1, int importunado2,
            Point[] importunos)
    {
        Point unPuntoEnUnPajar = new Point(mj[importunado2]);
        unPuntoEnUnPajar.translate(velocidadDelTocinoX, velocidadDelTocinoY);
        
        for(int i = 0; i < importunos.length; i++)
            if(Line2D.ptSegDist(
                    mj[importunado1].getX(), mj[importunado1].getY(),
                    mj[importunado2].getX(), mj[importunado2].getY(),
                    importunos[i].getX(), importunos[i].getY()) < 12.0 ||
               mj[importunado2].distance(importunos[i]) < 18.0 ||
               unPuntoEnUnPajar.distance(importunos[i]) < 18.0)
                return true;
                
        return false;
    }
    
    private void arrastrarBotinSinAnimadversion()
    {
        Polygon p = new Polygon(
                new int [] {mj[5].x, mj[5].x-30, mj[5].x-30,
                            mj[5].x, mj[5].x+30, mj[5].x+30},
                new int [] {mj[5].y-30, mj[5].y-20, mj[5].y+20,
                            mj[5].y+30, mj[5].y+20, mj[5].y-20},
                6);

        if(mj[8].x > 60 && p.contains(mj[8]))
        {
            for(int i = 1; i < 8; i++)
                if(puedeTirarseUnFarol(i))
                    paseDeRabona(i, 8);
        }
        else if(mj[9].x > 60 && p.contains(mj[9]))
        {
            for(int i = 1; i < 8; i++)
                if(puedeTirarseUnFarol(i))
                    paseDeRabona(i, 9);
        }
        else if(mj[10].x > 60 && p.contains(mj[10]))
        {
            for(int i = 1; i < 8; i++)
                if(puedeTirarseUnFarol(i))
                    paseDeRabona(i, 10);
        }
        else if(puedeTirarseUnFarol(1))
            if(!entrometido(1, 2, contrarios))
                paseDeRabona(1, 2);
            else if(!entrometido(1, 4, contrarios))
                paseDeRabona(1, 4);
            else if(!entrometido(1, 5, contrarios))
                paseDeRabona(1, 5);
            else if(nosIntercepta(mj[1], contrarios))
                arrastrarBotinSinAnimoDeLucro();
            else
                paseDeRabona(1, 1);
        else if(puedeTirarseUnFarol(2))
            if(!entrometido(2, 3, contrarios))
                paseDeRabona(2, 3);
            else if(!entrometido(2, 1, contrarios))
            paseDeRabona(2, 1);
            else if(!entrometido(2, 5, contrarios))
                paseDeRabona(2, 5);
            else if(nosIntercepta(mj[2], contrarios))
                arrastrarBotinSinAnimoDeLucro();
            else
                paseDeRabona(2, 2);
        else if(puedeTirarseUnFarol(3))
            if(!entrometido(3, 6, contrarios))
                paseDeRabona(3, 6);
            else if(!entrometido(3, 2, contrarios))
                paseDeRabona(3, 2);
            else if(!entrometido(3, 5, contrarios))
                paseDeRabona(3, 5);
            else if(nosIntercepta(mj[3], contrarios))
                arrastrarBotinSinAnimoDeLucro();
            else
                paseDeRabona(3, 3);
        else if(puedeTirarseUnFarol(6))
            if(!entrometido(6, 7, contrarios))
                paseDeRabona(6, 7);
            else if(!entrometido(6, 3, contrarios))
                paseDeRabona(6, 3);
            else if(!entrometido(6, 5, contrarios))
                paseDeRabona(6, 5);
            else if(nosIntercepta(mj[6], contrarios))
                arrastrarBotinSinAnimoDeLucro();
            else
                paseDeRabona(6, 6);
        else if(puedeTirarseUnFarol(7))
            if(!entrometido(7, 4, contrarios))
                paseDeRabona(7, 4);
            else if(!entrometido(7, 6, contrarios))
                paseDeRabona(7, 6);
            else if(!entrometido(7, 5, contrarios))
                paseDeRabona(7, 5);
            else if(nosIntercepta(mj[7], contrarios))
                arrastrarBotinSinAnimoDeLucro();
            else
                paseDeRabona(7, 7);
        else if(puedeTirarseUnFarol(4))
            if(!entrometido(4, 1, contrarios))
                paseDeRabona(4, 1);
            else if(!entrometido(4, 7, contrarios))
                paseDeRabona(4, 7);
            else if(!entrometido(4, 5, contrarios))
                paseDeRabona(4, 5);
            else if(nosIntercepta(mj[4], contrarios))
                arrastrarBotinSinAnimoDeLucro();
            else
                paseDeRabona(4, 4);
        else
            if(!entrometido(5, 7, contrarios))
                paseDeRabona(5, 7);
            else if(!entrometido(5, 6, contrarios))
                paseDeRabona(5, 6);
            else if(!entrometido(5, 3, contrarios))
                paseDeRabona(5, 3);
            else if(!entrometido(5, 2, contrarios))
                paseDeRabona(5, 2);
            else if(!entrometido(5, 1, contrarios))
                paseDeRabona(5, 1);
            else
                paseDeRabona(5, 4);
    }
    
    private void aPorEllasOee(int ronaldo)
    {
        /*if(mj[ronaldo].x > 70)
            comandos.add(new ComandoIrA(ronaldo, mj[9].getX(), mj[9].getY()));
//210.0, 0.0));
        else */if(dJugadores[ronaldo][moscardon[ronaldo]] < 10.0 &&
                mj[ronaldo].x < contrarios[moscardon[ronaldo]].x+5)
        {
            double teletransporteX = 160.0 - mj[ronaldo].x,
                   teletransporteY = mj[ronaldo].y <
                    contrarios[moscardon[ronaldo]].y ? -120.0 : 120.0;
            
            double alfa = Math.sqrt(625.0 /
                    (teletransporteX*teletransporteX +
                     teletransporteY*teletransporteY));
                
            teletransporteX *= alfa;
            teletransporteY *= alfa;
            
            double telequinesiaX = mj[ronaldo].getX() + teletransporteX,
                   telequinesiaY = mj[ronaldo].getY() + teletransporteY;

            comandos.add(new ComandoIrA
                    (ronaldo, telequinesiaX, telequinesiaY));
        }
        else
        {
            double salirDerrapandoX = mj[ronaldo].x > 70 ?
                                 210 - mj[ronaldo].x : mj[9].x - mj[ronaldo].x,
                   salirDerrapandoY = mj[ronaldo].x > 70 ?
                                 -mj[ronaldo].y      : mj[9].y - mj[ronaldo].y;
            /*double salirDerrapandoX = mj[9].x - mj[ronaldo].x,
                   salirDerrapandoY = mj[9].y - mj[ronaldo].y;*/
            
            double alfa = Math.sqrt(625.0 /
                    (salirDerrapandoX*salirDerrapandoX +
                     salirDerrapandoY*salirDerrapandoY));//Teorema de Zidane
                
            double loQueElVientoSeLLevo = salirDerrapandoX *= alfa;
            double gandalf = salirDerrapandoX, saruman = loQueElVientoSeLLevo,
                   noVayamosAFaenar;
            salirDerrapandoY *= alfa;
            
            double toPalanteX = mj[ronaldo].getX() + salirDerrapandoX,
                   toPalanteY = mj[ronaldo].getY() + salirDerrapandoY;

            
            boolean cantonaaExasperado = toPalanteX > 160.0 ? true :
                    toPalanteX < -160.0 ? true : toPalanteY > 120.0 ? true :
                    toPalanteY < -120.0 ? true : false;
            
            //No tomar rumbo a Brasil
            toPalanteX = toPalanteX > 160.0? 160.0 :
                    toPalanteX < -160.0 ? -160.0 : toPalanteX;
            toPalanteY = toPalanteY > 120.0? 120.0 :
                    toPalanteY < -120.0 ? -120.0 : toPalanteY;
            
            boolean alternar = mj[ronaldo].y > 0, clamidia = true,
                    ensamblador = true;
            
            
            for(int i = 0; i < contrarios.length; i++)
                if(contrarios[i].distance(toPalanteX, toPalanteY) < 12.0 ||
                    cantonaaExasperado)
                {
                    //Barrer simultneamente los dos arcos complementarios de
                    //Lgolas
                    if(alternar)
                        //Minas Tirith
                    {
                        if(clamidia)
                        {
                            if(++gandalf > 31.0)
                                clamidia = false;
                            
                            //Notar que la primera siempre es en la frente
                            gandalf = gandalf > 32.0 ? gandalf-2 : gandalf;
                            
                            salirDerrapandoY = Math.sqrt
                                    ((noVayamosAFaenar = 625.0-gandalf*gandalf)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        else
                        {
                            if(--gandalf <= -loQueElVientoSeLLevo)
                                //Si la compaa ha fracasado, entregar el
                                //anillo a Ronaldo para que se vuelva invisible.
                                return;

                            salirDerrapandoY = -Math.sqrt
                                    ((noVayamosAFaenar = 625.0-gandalf*gandalf)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        salirDerrapandoX = gandalf;
                    }
                    else
                        //Minas Morgl
                    {
                        if(ensamblador)
                        {
                            if(--saruman < -31.0)
                                ensamblador = false;
                            salirDerrapandoY = Math.sqrt
                                    ((noVayamosAFaenar = 625.0-saruman*saruman)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        else
                        {
                            if(++saruman >= -loQueElVientoSeLLevo)
                                //Si la compaa ha fracasado, entregar el
                                //anillo a Ronaldo para que se vuelva invisible.
                                return;

                            salirDerrapandoY = -Math.sqrt
                                    ((noVayamosAFaenar = 625.0-saruman*saruman)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        salirDerrapandoX = saruman;
                    }
                    
                    alternar = !alternar;

                    
                    toPalanteX = mj[ronaldo].getX() + salirDerrapandoX;
                    toPalanteY = mj[ronaldo].getY() + salirDerrapandoY;
                    
                    cantonaaExasperado = toPalanteX > 160.0 ? true :
                        toPalanteX < -160.0 ? true : toPalanteY > 120.0 ? true :
                        toPalanteY < -120.0 ? true : false;
                    
                    toPalanteX = toPalanteX > 160.0? 160.0 :
                        toPalanteX < -160.0 ? -160.0 : toPalanteX;
                    toPalanteY = toPalanteY > 120.0? 120.0 :
                        toPalanteY < -120.0 ? -120.0 : toPalanteY;
                    
                    i = -1;//Magia potagia
                }
            

            comandos.add(new ComandoIrA
                    (ronaldo, toPalanteX, toPalanteY));
        }
    }
    
    private void arrastrarBotinSinAnimoDeLucro()
    {
        int [] losLlanerosSolitarios = new int[7];
        int numeroDeLlaneros = 0;
        int bilyElNinio = 1;
        
        bucleDeLaMoscaDetrasDeLaOreja:
        for(int i = 1; i < 8; i++)
        {
            if(puedeTirarseUnFarol(i))
                bilyElNinio = i;
            
            for(int j = 0; j < contrarios.length; j++)
                if(mj[i].distance(contrarios[j]) < 20.0)
                    continue bucleDeLaMoscaDetrasDeLaOreja;
            
            losLlanerosSolitarios[numeroDeLlaneros++] = i;
        }
        
        if(numeroDeLlaneros > 0)
            paseDeRabona(bilyElNinio,
                    losLlanerosSolitarios[numeroDeLlaneros-1]);
        else
            paseDeRabona(bilyElNinio, 5);
    }
    
    private void arrastrarBotin()
    {
        if(puedeTirarseUnFarol(8) || puedeTirarseUnFarol(9) ||
           puedeTirarseUnFarol(10))
            return;
        
        Polygon p = new Polygon(
                new int [] {mj[5].x, mj[5].x-30, mj[5].x-30,
                            mj[5].x, mj[5].x+30, mj[5].x+30},
                new int [] {mj[5].y-30, mj[5].y-20, mj[5].y+20,
                            mj[5].y+30, mj[5].y+20, mj[5].y-20},
                6);

        if(mj[8].x > 60 && p.contains(mj[8]))
        {
            for(int i = 1; i < 8; i++)
                if(puedeTirarseUnFarol(i))
                    paseDeRabona(i, 8);
        }
        else if(mj[9].x > 60 && p.contains(mj[9]))
        {
            for(int i = 1; i < 8; i++)
                if(puedeTirarseUnFarol(i))
                    paseDeRabona(i, 9);
        }
        else if(mj[10].x > 60 && p.contains(mj[10]))
        {
            for(int i = 1; i < 8; i++)
                if(puedeTirarseUnFarol(i))
                    paseDeRabona(i, 10);
        }
        else if(puedeTirarseUnFarol(1))
            if(!entrometido(1, 2, contrarios))
                paseDeRabona(1, 2);
            else if(!entrometido(1, 4, contrarios))
                paseDeRabona(1, 4);
            else if(!entrometido(1, 5, contrarios))
                paseDeRabona(1, 5);
            else
                tirarlaFuera(1);
        else if(puedeTirarseUnFarol(2))
            if(!entrometido(2, 3, contrarios))
                paseDeRabona(2, 3);
            else if(!entrometido(2, 1, contrarios))
                paseDeRabona(2, 1);
            else if(!entrometido(2, 5, contrarios))
                paseDeRabona(2, 5);
            else
                tirarlaFuera(2);
        else if(puedeTirarseUnFarol(3))
            if(!entrometido(3, 6, contrarios))
                paseDeRabona(3, 6);
            else if(!entrometido(3, 2, contrarios))
                paseDeRabona(3, 2);
            else if(!entrometido(3, 5, contrarios))
                paseDeRabona(3, 5);
            else
                tirarlaFuera(3);
        else if(puedeTirarseUnFarol(6))
            if(!entrometido(6, 7, contrarios))
                paseDeRabona(6, 7);
            else if(!entrometido(6, 3, contrarios))
                paseDeRabona(6, 3);
            else if(!entrometido(6, 5, contrarios))
                paseDeRabona(6, 5);
            else
                tirarlaFuera(6);
        else if(puedeTirarseUnFarol(7))
            if(!entrometido(7, 4, contrarios))
                paseDeRabona(7, 4);
            else if(!entrometido(7, 6, contrarios))
                paseDeRabona(7, 6);
            else if(!entrometido(7, 5, contrarios))
                paseDeRabona(7, 5);
            else
                tirarlaFuera(7);
        else if(puedeTirarseUnFarol(4))
            if(!entrometido(4, 1, contrarios))
                paseDeRabona(4, 1);
            else if(!entrometido(4, 7, contrarios))
                paseDeRabona(4, 7);
            else if(!entrometido(4, 5, contrarios))
                paseDeRabona(4, 5);
            else
                tirarlaFuera(4);
        else
            if(!entrometido(5, 7, contrarios))
                paseDeRabona(5, 7);
            else if(!entrometido(5, 6, contrarios))
                paseDeRabona(5, 6);
            else if(!entrometido(5, 3, contrarios))
                paseDeRabona(5, 3);
            else if(!entrometido(5, 2, contrarios))
                paseDeRabona(5, 2);
            else if(!entrometido(5, 1, contrarios))
                paseDeRabona(5, 1);
            else
                paseDeRabona(5, 4);
    }

    private void tirarlaFueraDeVerdadVerdadera(int deportoso)
    {
        int diferencialX = 0, diferencialY = 0;
        
        for(int i = 0; i < dJugadores[deportoso].length; i++)
            if(dJugadores[deportoso][i] < 40.0)
            {
                diferencialX += mj[deportoso].x - contrarios[i].x;
                diferencialY += mj[deportoso].y - contrarios[i].y;
            }
        
        double alfa = Math.sqrt(625.0 /
                (diferencialX * diferencialX +
                 diferencialY * diferencialY));

        double vedejaX = mj[deportoso].getX() + diferencialX * alfa,
               vedejaY = mj[deportoso].getY() + diferencialY * alfa;

        comandos.add(new ComandoGolpearBola
                (deportoso, mj[deportoso].getX()+50.0,
                 mj[deportoso].getY()-40.0)); //, vedejaX, vedejaY));
    }
    
    private void tirarlaFueraDeMentiraMentirosa(int deportoso)
    {
        double diferencialX = 0.0, diferencialY = 0.0;
        
        for(int i = 0; i < dJugadores[deportoso].length; i++)
            if(dJugadores[deportoso][i] < 40.0)
            {
                diferencialX += 1/(mj[deportoso].getX() - contrarios[i].getX());
                diferencialY += 1/(mj[deportoso].getY() - contrarios[i].getY());
            }
        
        double alfa = Math.sqrt(625.0 /
                (diferencialX * diferencialX +
                 diferencialY * diferencialY));

        double vedejaX = mj[deportoso].getX() + diferencialX * alfa,
               vedejaY = mj[deportoso].getY() + diferencialY * alfa;

        comandos.add(new ComandoGolpearBola
                (deportoso, mj[deportoso].getX()+50.0,
                 mj[deportoso].getY()-40.0)); //, vedejaX, vedejaY));
    }
    
    private void tirarlaFuera(int deportoso)
    {
        double diferencialX = 0.0, diferencialY = 0.0;
        
        for(int i = 0; i < dJugadores[deportoso].length; i++)
            if(dJugadores[deportoso][i] < 40.0)
            {
                double teVeoLasIntencionesIntencionalmente =
                        mj[deportoso].distance(contrarios[i]);
                diferencialX += (mj[deportoso].getX() - contrarios[i].getX()) /
                        teVeoLasIntencionesIntencionalmente;
                diferencialY += (mj[deportoso].getY() - contrarios[i].getY()) /
                        teVeoLasIntencionesIntencionalmente;
            }
        
        double alfa = Math.sqrt(625.0 /
                (diferencialX * diferencialX +
                 diferencialY * diferencialY));

        double vedejaX = mj[deportoso].getX() + diferencialX * alfa,
               vedejaY = mj[deportoso].getY() + diferencialY * alfa;

        comandos.add(new ComandoGolpearBola
                (deportoso, vedejaX, vedejaY));
        /* mj[deportoso].getX()+50.0, mj[deportoso].getY()-40.0));*/
    }

    private void paseImpresionantePorDetrasYPorDelante(int yo, int aTi)
    {
        double marejadaEnX = mj[aTi].x - mj[yo].x,
               marejadaEnY = mj[aTi].y - mj[yo].y,
               hablemosDelMireralisssmo = 
                (mj[aTi].distance(mj[yo]) / 2.5);

        hablemosDelMireralisssmo *= hablemosDelMireralisssmo;

        double alfa = Math.sqrt(hablemosDelMireralisssmo /
                (marejadaEnX * marejadaEnX +
                 marejadaEnY * marejadaEnY));

        marejadaEnX = alfa * marejadaEnX + mj[yo].getX();
        marejadaEnY = alfa * marejadaEnY + mj[yo].getY();

        comandos.add(new ComandoGolpearBola(yo,
                marejadaEnX, marejadaEnY));
    }
    
    private void casillasV()
    {
        double x = bola.getX(), y2 = bola.getY();
        
        //Movimiento portero
        double noCortaElMarSinoVuela = (elsaPataki * -160.0 + devon);
        if(noCortaElMarSinoVuela > -30.0 && noCortaElMarSinoVuela < 30.0)
            comandos.add(new ComandoIrA
                    (0, nValores[0][0], noCortaElMarSinoVuela));
        else
        {
            int y = (int)(y2 / 1.5);
            comandos.add(new ComandoIrA
                    (0, nValores[0][0], y < -30 ? -30 : y > 30 ? 30 : y));
        }
        
        double /*casillasX = mj[0].getX(),*/ casillasY = mj[0].getY();
        
        if((casillasY > 65 || casillasY < -65) &&
                mj[0].distance(bola) > contrarios[getListaCercanos
                 (contrarios, bola)[0]].distance(bola))
        {
            estamosTramandoAlgo[0] = true;
            comandos.add(loQueTramamos[0] =
                    new ComandoIrA(0, nValores[0][0], nValores[0][1]));
            escenarioDeLaTrama[0] = new Point(nValores[0][0], nValores[0][1]);
        }
        else if(sj.getMasCercanoDeBola() == 0)
            comandos.add(new ComandoIrA(0, x, y2));
        
        
        if(nJug2 == 0)
            comandos.add(new ComandoIrA(nJug2, x, y2));
        
        saqueDeEspartaco();
    }
    
    private void cannavaroV()
    {
        double x = bola.getX(), y2 = bola.getY();
        
        int y = (int)(y2 / 1.5);
        
        /*----------1----------*///Marcar
        if(!cubre[1])
        {
            marcar[1] = 0;
            double d = dJugadoresMasPorteria[1][0];
            for(int i = 1; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[1][i] < d)
                {
                    d = dJugadoresMasPorteria[1][i];
                    marcar[1] = i;
                }
            cubierto[marcar[1]] = true;
            cubre [1] = true;
        }
            
        double deltaX = Math.abs(mj[1].getX() - x)/4;
        if(mj[1].getX() > x)
            deltaX = -deltaX;
        if(mj[1].distance(bola) < tierraALaVista[1] &&
                mj[1].distance(contrarios[marcar[1]]) < 30)
            comandos.add(new ComandoIrA(1,
                    contrarios[marcar[1]].getX()+deltaX, bola.getY()));
        else
        {
            double deltaY = Math.abs(mj[1].getY() - y2)/4;
            if(mj[1].getY() > y2)
                deltaY = -deltaY;
            
            comandos.add(new ComandoIrA(1,
                    contrarios[marcar[1]].getX()+deltaX,
                    contrarios[marcar[1]].getY()+deltaY));
        }
        /*----------1----------*/
        
        jogaBonito(1);
        
        if(sj.getMasCercanoDeBola() == 1)
            comandos.add(new ComandoIrA(1, x, y2));
        else if(nJug2 == 1)
            comandos.add(new ComandoIrA(nJug2, x, y2));
    }
    
    private void fernandoHierroV()
    {
        double x = bola.getX(), y2 = bola.getY();
        
        int y = (int)(y2 / 1.5);
        
        /*----------1----------*///Marcar
        if(!cubre[2])
        {
            double d = 800.0;//2 * diagonal campo
            for(int i = 0; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[2][i] < d)
                {
                    d = dJugadoresMasPorteria[2][i];
                    marcar[2] = i;
                }
            cubierto[marcar[2]] = true;
            cubre [2] = true;
        }
            
        double deltaX = Math.abs(mj[2].getX() - x)/4;
        if(mj[2].getX() > x)
            deltaX = -deltaX;
        if(mj[2].distance(bola) < tierraALaVista[2] &&
                mj[2].distance(contrarios[marcar[2]]) < 30)
            comandos.add(new ComandoIrA(2,
                    contrarios[marcar[2]].getX()+deltaX, bola.getY()));
        else
        {
            double deltaY = Math.abs(mj[2].getY() - y2)/4;
            if(mj[2].getY() > y2)
                deltaY = -deltaY;
            
            comandos.add(new ComandoIrA(2,
                    contrarios[marcar[2]].getX()+deltaX,
                    contrarios[marcar[2]].getY()+deltaY));
        }
        /*----------1----------*/
        
        jogaBonito(2);
        
        if(sj.getMasCercanoDeBola() == 2)
            comandos.add(new ComandoIrA(2, x, y2));
        else if(nJug2 == 2)
            comandos.add(new ComandoIrA(nJug2, x, y2));
    }
    
    private void mj3V()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*----------1----------*///Marcar
        
        if(!cubre[3])
        {
            double d = 800.0;//2 * diagonal campo
            for(int i = 0; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[3][i] < d)
                {
                    d = dJugadoresMasPorteria[3][i];
                    marcar[3] = i;
                }
            cubierto[marcar[3]] = true;
            cubre [3] = true;
        }
            
        double deltaX = Math.abs(mj[3].getX() - x)/4;
        if(mj[3].getX() > x)
            deltaX = -deltaX;
        if(mj[3].distance(bola) < tierraALaVista[3] &&
                mj[3].distance(contrarios[marcar[3]]) < 30)
            comandos.add(new ComandoIrA(3,
                    contrarios[marcar[3]].getX()+deltaX, bola.getY()));
        else
        {
            double deltaY = Math.abs(mj[3].getY() - y)/4;
            if(mj[3].getY() > y)
                deltaY = -deltaY;
            
            comandos.add(new ComandoIrA(3,
                    contrarios[marcar[3]].getX()+deltaX,
                    contrarios[marcar[3]].getY()+deltaY));
        }
        /*----------1----------*/
         
        jogaBonito(3);
        
        if(nJug2 == 3)
            comandos.add(new ComandoIrA(nJug2, x, y));
        else if(sj.getMasCercanoDeBola() == 3)
            comandos.add(new ComandoIrA(3, x, y));
    }
    
    private void mj4V()
    {
        double x = bola.getX(), y = bola.getY();
        
        jogaBonito(4);
        
        if(nJug2 == 4)
            comandos.add(new ComandoIrA(nJug2, x, y));
        else if(sj.getMasCercanoDeBola() == 4)
            comandos.add(new ComandoIrA(4, x, y));
    }
    
    private void mj5V()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*----------1----------*///Marcar
        
        if(!cubre[5])
        {
            double d = 800.0;//2 * diagonal campo
            for(int i = 0; i < 11; i++)
                if(!cubierto[i] && dJugadoresMasPorteria[5][i] < d)
                {
                    d = dJugadoresMasPorteria[5][i];
                    marcar[5] = i;
                }
            cubierto[marcar[5]] = true;
            cubre [5] = true;
        }
            
        double deltaX = Math.abs(mj[5].getX() - x)/4;
        if(mj[5].getX() > x)
            deltaX = -deltaX;
        if(mj[5].distance(bola) < tierraALaVista[5] &&
                mj[5].distance(contrarios[marcar[5]]) < 30)
            comandos.add(new ComandoIrA(5,
                    contrarios[marcar[5]].getX()+deltaX, bola.getY()));
        else
        {
            double deltaY = Math.abs(mj[5].getY() - y)/4;
            if(mj[5].getY() > y)
                deltaY = -deltaY;
            
            comandos.add(new ComandoIrA(5,
                    contrarios[marcar[5]].getX()+deltaX,
                    contrarios[marcar[5]].getY()+deltaY));
        }
        /*----------1----------*/
        
        
        jogaBonito(5);
        
        if(nJug2 == 5)
            comandos.add(new ComandoIrA(nJug2, x, y));
        else if(sj.getMasCercanoDeBola() == 5)
            comandos.add(new ComandoIrA(5, x, y));
    }
    
    private void mj6V()
    {
         double x = bola.getX(), y = bola.getY();
        
         jogaBonito(6);
         
         if(nJug2 == 6)
             comandos.add(new ComandoIrA(nJug2, x, y));
         else if(sj.getMasCercanoDeBola() == 6)
            comandos.add(new ComandoIrA(6, x, y));
    }
    
    private void mj7V()
    {
        double x = bola.getX(), y = bola.getY();
        
        jogaBonito(7); 
        
        if(nJug2 == 7)
            comandos.add(new ComandoIrA(nJug2, x, y));
        else if(sj.getMasCercanoDeBola() == 7)
            comandos.add(new ComandoIrA(7, x, y));
    }
    
    private void mj8V()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
        if(y > 10)
            y = 10;
        if(x < 0)
            x = 0;
        /*---------------------*/
        
        if(nJug2 == 8)
            comandos.add(new ComandoIrA(nJug2, x, y));
        else if(sj.getMasCercanoDeBola() == 8)
            comandos.add(new ComandoIrA(8, x, y));
        
        if(mj[8].distance(160.0, 0.0) < 95)
            if(1.5*mj[8].getX()-mj[8].getY() > 270.0 ||
                1.5*mj[8].getX()+mj[8].getY() > 270.0)
                paseDeCastigo(8, listoParaRematar());
            else if(mj[8].distance(new Point(160, 0)) < 90.0)
                tiroDeLaAceitunaALaLuna(8);
            else if(siemprePositifvo(8, 9))
                paseDeCastigo(8, 9);
            else
                paseDeCastigo(8,10);
        else
            queVaAPasarElObus(8);
    }
    
    private void leoMessiV()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
        if(x < 0)
            x = 0;
        /*---------------------*/
        
        if(nJug2 == 9)
            comandos.add(new ComandoIrA(nJug2, x, y));
        else if(sj.getMasCercanoDeBola() == 9)
            comandos.add(new ComandoIrA(9, x, y));
        
        if(puedeTirarseUnFarol(9) && bola.distance(new Point(0, 0)) < 10)
            if(r.nextBoolean())
                paseImpresionantePorDetrasYPorDelante(9, 4);
            else
                paseImpresionantePorDetrasYPorDelante(9, 6);
        
        else if(mj[9].distance(160.0, 0.0) < 95)
            if(1.5*mj[9].getX()-mj[9].getY() > 270.0 ||
                1.5*mj[9].getX()+mj[9].getY() > 270.0)
                paseDeCastigo(9, listoParaRematar());
            else if(mj[9].distance(new Point(160, 0)) < 90.0)
                tiroDeLaAceitunaALaLuna(9);
            else if(siemprePositifvo(10, 8))
                paseDeCastigo(9, 8);
            else
                paseDeCastigo(9,10);
        else
            queVaAPasarElObus(9);
    }
    
    private void ronaldoV()
    {
        double x = bola.getX(), y = bola.getY();
        
        /*---------------------*///Mantener zona
        if(y < -10)
            y = -10;
        if(x < 0)
            x = 0;
        /*---------------------*/
        
        if(nJug2 == 10)
            comandos.add(new ComandoIrA(nJug2, x, y));
        else if(sj.getMasCercanoDeBola() == 10)
            comandos.add(new ComandoIrA(10, x, y));
        
        if(puedeTirarseUnFarol(10) && bola.distance(new Point(0, 0)) < 10)
            if(r.nextBoolean())
                paseImpresionantePorDetrasYPorDelante(10, 4);
            else
                paseImpresionantePorDetrasYPorDelante(10, 6);
        
        else if(mj[10].distance(160.0, 0.0) < 95)
            if(1.5*mj[10].getX()-mj[10].getY() > 270.0 ||
                1.5*mj[10].getX()+mj[10].getY() > 270.0)
                paseDeCastigo(10, listoParaRematar());
            else if(mj[10].distance(new Point(160, 0)) < 90.0)
                tiroDeLaAceitunaALaLuna(10);
            else if(siemprePositifvo(10, 9))
                paseDeCastigo(10, 9);
            else
                paseDeCastigo(10,8);
        else
            queVaAPasarElObus(10);
    }
    
    private int seOfrece(int puntoDeVista)
    {
        bucleDelMaleconEspiralDeRobertSmithson:
        for(int i = mj.length-1; i > 0; i--)
            if(i != puntoDeVista && mj[i].x >= mj[puntoDeVista].x &&
               mj[puntoDeVista].distance(mj[i]) < 90 &&
               dJugadores[puntoDeVista][moscardon[puntoDeVista]] <
                dJugadores[i][moscardon[i]])
            {
                for(int j = 0; j < contrarios.length; j++)
                    if(Line2D.ptSegDist(mj[puntoDeVista].getX(),
                         mj[puntoDeVista].getY(), mj[i].getX(), mj[i].getY(),
                         contrarios[j].getX(), contrarios[j].getY()) < 20.0)
                        continue bucleDelMaleconEspiralDeRobertSmithson;
                return i;
            }
                    
        return -1;
    }
    
    private void jogaBonito(int ronaldo)
    {
        int cambioDeOrientacion;
        
        if(puedeTirarseUnFarol(ronaldo))
            
        if(Line2D.ptSegDist(160.0, -30.0, 160.0, 30.0,
                mj[ronaldo].getX(), mj[ronaldo].getY()) < 30.0)
//                (mj[ronaldo].distance(160.0, 0.0) < 30.0)
            tiroDeLaAceitunaALaLuna(ronaldo);
        else if(villeValoDaElVistoBueno(ronaldo, new int [] {8, 9, 10}))
            return;
        else if(linierNoLevantaElBanderin(ronaldo, new int [] {8, 9, 10}))
            paseAlPie(ronaldo, efectosColateralesMasLaterales);
        else if(arbitroDejaSeguirLaJugada(ronaldo, new int [] {8, 9, 10}))
            paseQuePareceUnaCoz(ronaldo, efectosColateralesMasLaterales);
//        else if(bola.distance(contrarios[moscardon[ronaldo]]) <= 15.0 &&
//                meEstanEstresando[ronaldo] >=
//                dJugadores[ronaldo][moscardon[ronaldo]])
//            /*paseDeLaMuerte(ronaldo,
//                    analizarSituacionConLaCabezaEnNegro(ronaldo));*/
//            tiroDeLaAceitunaALaLuna(ronaldo);
        
        else if((cambioDeOrientacion = seOfrece(ronaldo)) != -1)
            paseDavidB(ronaldo, cambioDeOrientacion);
        else if(dJugadores[ronaldo][moscardon[ronaldo]] < 10.0 &&
                mj[ronaldo].x < contrarios[moscardon[ronaldo]].x+5)
        {
            double teletransporteX = 160.0 - mj[ronaldo].x,
                   teletransporteY = mj[ronaldo].y <
                    contrarios[moscardon[ronaldo]].y ? -120.0 : 120.0;
            
            double alfa = Math.sqrt(1024.0 /
                    (teletransporteX*teletransporteX +
                     teletransporteY*teletransporteY));//Teorema de Zidane
                
            teletransporteX *= alfa;
            teletransporteY *= alfa;
            
            double telequinesiaX = bola.getX() + teletransporteX,
                   telequinesiaY = bola.getY() + teletransporteY;

            comandos.add(new ComandoGolpearBola
                    (ronaldo, telequinesiaX, telequinesiaY));
        }
        else
        {
            double salirDerrapandoX = 160.0 - mj[ronaldo].x,
                   salirDerrapandoY = -mj[ronaldo].y;
            
            double alfa = Math.sqrt(1024.0 /
                    (salirDerrapandoX*salirDerrapandoX +
                     salirDerrapandoY*salirDerrapandoY));//Teorema de Zidane
                
            double loQueElVientoSeLLevo = salirDerrapandoX *= alfa;
            double gandalf = salirDerrapandoX, saruman = loQueElVientoSeLLevo,
                   noVayamosAFaenar;
            salirDerrapandoY *= alfa;
            
            double toPalanteX = bola.getX() + salirDerrapandoX,
                   toPalanteY = bola.getY() + salirDerrapandoY;

            
            boolean cantonaaExasperado = toPalanteX > 160.0 ? true :
                    toPalanteX < -160.0 ? true : toPalanteY > 120.0 ? true :
                    toPalanteY < -120.0 ? true : false;
            
            //No tomar rumbo a Brasil
            toPalanteX = toPalanteX > 160.0? 160.0 :
                    toPalanteX < -160.0 ? -160.0 : toPalanteX;
            toPalanteY = toPalanteY > 120.0? 120.0 :
                    toPalanteY < -120.0 ? -120.0 : toPalanteY;
            
            boolean alternar = mj[ronaldo].y > 0, clamidia = true,
                    ensamblador = true;
            
            
            for(int i = 0; i < contrarios.length; i++)
                if(contrarios[i].distance(toPalanteX, toPalanteY) < 32.0 ||
                    cantonaaExasperado)
                {
                    //Barrer simultneamente los dos arcos complementarios de
                    //Lgolas
                    if(alternar)
                        //Minas Tirith
                    {
                        if(clamidia)
                        {
                            if(++gandalf > 31.0)
                                clamidia = false;
                            
                            //Notar que la primera siempre es en la frente
                            gandalf = gandalf > 32.0 ? gandalf-2 : gandalf;
                            
                            salirDerrapandoY = Math.sqrt
                                    ((noVayamosAFaenar = 1024.0-gandalf*gandalf)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        else
                        {
                            if(--gandalf <= -loQueElVientoSeLLevo)
                                //Si la compaa ha fracasado, entregar el
                                //anillo a Ronaldo para que se vuelva invisible.
                            {
                                paseFatidico(ronaldo,
                                        getListaCercanos(mj, mj[ronaldo])[1]);
                                return;
                            }
                            salirDerrapandoY = -Math.sqrt
                                    ((noVayamosAFaenar = 1024.0-gandalf*gandalf)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        salirDerrapandoX = gandalf;
                    }
                    else
                        //Minas Morgl
                    {
                        if(ensamblador)
                        {
                            if(--saruman < -31.0)
                                ensamblador = false;
                            salirDerrapandoY = Math.sqrt
                                    ((noVayamosAFaenar = 1024.0-saruman*saruman)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        else
                        {
                            if(++saruman >= -loQueElVientoSeLLevo)
                                //Si la compaa ha fracasado, entregar el
                                //anillo a Ronaldo para que se vuelva invisible.
                            {
                                paseFatidico(ronaldo,
                                        getListaCercanos(mj, mj[ronaldo])[1]);
                                return;
                            }
                            salirDerrapandoY = -Math.sqrt
                                    ((noVayamosAFaenar = 1024.0-saruman*saruman)
                                     < 0.0 ? 0.0 : noVayamosAFaenar);
                        }
                        salirDerrapandoX = saruman;
                    }
                    
                    alternar = !alternar;

                    
                    toPalanteX = bola.getX() + salirDerrapandoX;
                    toPalanteY = bola.getY() + salirDerrapandoY;
                    
                    cantonaaExasperado = toPalanteX > 160.0 ? true :
                        toPalanteX < -160.0 ? true : toPalanteY > 120.0 ? true :
                        toPalanteY < -120.0 ? true : false;
                    
                    toPalanteX = toPalanteX > 160.0? 160.0 :
                        toPalanteX < -160.0 ? -160.0 : toPalanteX;
                    toPalanteY = toPalanteY > 120.0? 120.0 :
                        toPalanteY < -120.0 ? -120.0 : toPalanteY;
                    
                    i = -1;//Magia potagia
                }
            

            comandos.add(new ComandoGolpearBola
                    (ronaldo, toPalanteX, toPalanteY));
        }
    }
    
    private void paseDavidB(int yo, int aTi)
    {
        double marejadaEnX = mj[aTi].x - mj[yo].x,
               marejadaEnY = mj[aTi].y - mj[yo].y,
               hablemosDelMireralisssmo = 
                (mj[aTi].distance(mj[yo]) * 2.5);

        hablemosDelMireralisssmo *= hablemosDelMireralisssmo;

        double alfa = Math.sqrt(hablemosDelMireralisssmo /
                (marejadaEnX * marejadaEnX +
                 marejadaEnY * marejadaEnY));

        marejadaEnX = alfa * marejadaEnX + mj[yo].getX();
        marejadaEnY = alfa * marejadaEnY + mj[yo].getY();

        comandos.add(new ComandoGolpearBola(yo,
                marejadaEnX, marejadaEnY));
        
        estamosTramandoAlgo[aTi] = true;
                comandos.add(loQueTramamos [aTi] = new ComandoIrA
                        (aTi, bola.getX(), bola.getY()));
                escenarioDeLaTrama[aTi] = bola;
                ojoAlBalon[aTi] = true;
                acariciarElBalon[aTi] = mj[aTi].distance(bola);
    }
}
